Size: a a a

Compiler Development

2021 March 22

YS

Yaroslav Schekin in Compiler Development
Vladimir Kazanov
Прикладные программисты последние лет *дцать используют метод рекурсивного спуска и даже не вникают в споры теоретиков.

@true_grue даже заметку писал на эту тему: https://github.com/true-grue/Compiler-Development/blob/master/docs/descent.md
> Прикладные программисты последние лет *дцать

Это же только некоторые прикладные программисты.

> А прикладным разработчикам кажется, что такие грамматики очень удобны.

Т.е. https://xkcd.com/285/ ;)

> @true_grue даже заметку писал на эту тему:

Для использования recursive descent именно и только в этих ситуациях есть конкретные причины, Вам не кажется?
источник

K

Kir in Compiler Development
Vladimir Kazanov
полагаю, тут речь о shift/reduce и shift/shift, которые не случаются ни в LL, ни в PEG по определению 😊
Но это же не в рантайме происходит, а во время построения таблицы
источник

VK

Vladimir Kazanov in Compiler Development
Yaroslav Schekin
> Прикладные программисты последние лет *дцать

Это же только некоторые прикладные программисты.

> А прикладным разработчикам кажется, что такие грамматики очень удобны.

Т.е. https://xkcd.com/285/ ;)

> @true_grue даже заметку писал на эту тему:

Для использования recursive descent именно и только в этих ситуациях есть конкретные причины, Вам не кажется?
ну я привел список популярных реализаций языков. Чем не цитаты? Это лучше голословного "формализм некрасивый".

> Для использования recursive descent именно и только в этих ситуациях есть конкретные причины, Вам не кажется?

да, конечно. После определенного (и довольно низкого) порога становится проще и эффективней сделать рекурсивный спуск. Да и вообще рекурсивный спуск не требует особых объяснений среднему программисту, не в пример бесконечных и бесплодных теоретических споров о грамматиках.
источник

VK

Vladimir Kazanov in Compiler Development
я действительно думаю, что тема разбора теоретически решена уж лет 60 как. Последние большие прорывы это GLR/GLL, все остальное это уже упрощение и шлифовка имеющейся теории.

EDIT: 70 -> 60
источник

YS

Yaroslav Schekin in Compiler Development
Vladimir Kazanov
ну я привел список популярных реализаций языков. Чем не цитаты? Это лучше голословного "формализм некрасивый".

> Для использования recursive descent именно и только в этих ситуациях есть конкретные причины, Вам не кажется?

да, конечно. После определенного (и довольно низкого) порога становится проще и эффективней сделать рекурсивный спуск. Да и вообще рекурсивный спуск не требует особых объяснений среднему программисту, не в пример бесконечных и бесплодных теоретических споров о грамматиках.
> Чем не цитаты?

Тем, что "зрелыми" компиляторами область применения parsing не исчерпывается?

> Это лучше голословного "формализм некрасивый".

Почему "голословного"? И не "некрасивый", а в нём есть конкретная проблема, вот и всё.

> После определенного (и довольно низкого) порога становится проще и эффективней сделать рекурсивный спуск.

Вот именно, после. И "порог" этот проходят обычно тогда, когда для этого языка уже напишут гарантированно однозначную (т.е. LL(1)/LALR, чаще всего) грамматику и протестируют её. Естественно, "испортить" такую грамматику ни PEG, ни recursive descent уже не удастся. ;)
Я о том, что существенная часть из упомянутого списка компиляторов на recursive descent перешла, и именно с "классических" parser generators. Т.е. parsing там до этого уже корректно работал, AST не "падали с неба". ;)

> Да и вообще рекурсивный спуск не требует особых объяснений среднему программисту

Да, это плюс.

> не в пример бесконечных и бесплодных теоретических споров о грамматиках.

Мне кажется, что это не так.

>  что тема разбора теоретически решена уж лет 60 как.

А это уже оценочное суждение. Новые подходы / алгоритмы появляются, это факт.
"Существенно" это лично для кого-то или нет — другое дело.
источник

f

fldlg2 in Compiler Development
Kir
> обнаружение неоднозначностей в run time в некоторых популярных генераторах

ШТО
Собственно, вот:

"The advantages  of ALL(*) stem from  moving grammar analysis to parse time, but this choice places an additional burden on grammar functional testing. As with all dynamic approaches,  programmers  must  cover  as  many  grammar position  and  input  sequence  combinations  as  possible  to find  grammar  ambiguities.  Standard  source  code  coverage tools can help programmers measure grammar coverage for ALL(*) parsers. High coverage in the generated code corresponds to high grammar coverage."

https://www.antlr.org/papers/allstar-techreport.pdf
источник

M

MrSmith in Compiler Development
fldlg2
Гораздо больше они запутывают тех, кто ещё не успел привыкнуть ни к чему и выбирает, куда двигаться. В этом случае очень полезно заранее знать риски.
Да
источник

M

MrSmith in Compiler Development
Я погорел на этом раза два три, напиши мне человеческим языком ограничения на грамматику и инструмент было бы лучше, но в конечном итоге даже ллвм и его билдеры это такое себе и в коде приходиться разбираться, просто потому, что если ты не понимаешь почему тебе ассертит тебе врятли поможет книги и статьи у кого такой же код работает
источник

M

MrSmith in Compiler Development
Я вот где то читал, что context это примитив синхронизации, а потом оказалось что кое где при сравнении типов он учитывается и строки генерить CreateStringPtr не очень идея
источник

МР

Максим Резник... in Compiler Development
Александр
Не делайте так. Лучше утверждение/выражение/предложение, более того как раз русское "предложение" пускай в несколько забытом смысле как раз тождественно по смыслу statement, но современнее "утверждение".
Взять к примеру ГОСТ по языку Ада. Авторы пишут "Переводчики стремились придерживаться терминологических традицый отечественной литературы по программированию, чему способствовала 5-летняя дискуссия по терминалогии в Рабочей группе по языку программирования Ада Комиссии по языкам и системам программирования при ГКНТ СССР".

Или книгу В.Ш. Кауфмана "Языки программирования. Концепции и принципы  2017".

Там используется statement = оператор.
источник

KR

K R in Compiler Development
Максим Резник
Взять к примеру ГОСТ по языку Ада. Авторы пишут "Переводчики стремились придерживаться терминологических традицый отечественной литературы по программированию, чему способствовала 5-летняя дискуссия по терминалогии в Рабочей группе по языку программирования Ада Комиссии по языкам и системам программирования при ГКНТ СССР".

Или книгу В.Ш. Кауфмана "Языки программирования. Концепции и принципы  2017".

Там используется statement = оператор.
Они реально написали «традицый»?
источник

МР

Максим Резник... in Compiler Development
источник

KR

K R in Compiler Development
А, ну хорошо. Видимо, таки сломали spellchecker неуемным употреблением албанского!
источник

А

Александр in Compiler Development
Максим Резник
Взять к примеру ГОСТ по языку Ада. Авторы пишут "Переводчики стремились придерживаться терминологических традицый отечественной литературы по программированию, чему способствовала 5-летняя дискуссия по терминалогии в Рабочей группе по языку программирования Ада Комиссии по языкам и системам программирования при ГКНТ СССР".

Или книгу В.Ш. Кауфмана "Языки программирования. Концепции и принципы  2017".

Там используется statement = оператор.
В советах с 60-ых ИТ отрасль уверенно саботировалась и по крайней мере я не рекомендую ссылатся на позднесоветский опыт и практику в ИТ отрасли, как пример в горячо известном Ахо+Ульмане и др. переводчик сослался на советский учебник по формальным языкам(переводу учебника), откровенно странный переводчик которого перевёл "production" как "продукция"(большей дикостью языкового характера как по мне является та дичь, что творится с глубоким обучением: как пример читал "Глубокое обучение" Николенко и соавторов и даже не смешно - авторы сами всю книгу оправдывают заимствования, чем позорятся вдвойне, с каждой новой темой птичий язык набирает ход, хотя перед авторами были широкие возможности адаптации нетипичных определений к родному языку) и эта нездоровая традиция пользования несуразных транслитераций, когда я уж прошу меня извинить, но переводчики не чувствуют связей между областями знаний, между явлениями и в учебнике по суть математической дисциплине не могут вспомнить привычное "произведение"(тот же vector product) и "порождение", то у меня вопросы к компетенции таких переводчиков, либо к РАН, которая положила болт на вопрос регулирования теоретической целостности и полноты областей знаний, т.к. если даже для книг на великом и могучем нужно лезть за словарём или в первоисточники термина, изучать исходное значение, то это наталкивает на грустные мысли. Возвращаясь к теме я рекомендую переводить statement как "утверждение", "положение", "предложение" и "выражение" в зависимости от содержания - главное, чтобы перевод вызывал качественно передавал смысл и не дурил голову читателю.
источник

DF

Dollar Føølish in Compiler Development
Но ведь есть понятие продукции в экспертных системах
источник

DF

Dollar Føølish in Compiler Development
Продукционые правила и тп
источник

DF

Dollar Føølish in Compiler Development
Production rules
источник

А

Александр in Compiler Development
А когда оно вошло в оборот ?)
источник

DF

Dollar Føølish in Compiler Development
Давно
источник

А

Александр in Compiler Development
как перевод
источник