Size: a a a

Compiler Development

2021 March 22

VK

Vladimir Kazanov in Compiler Development
suhr
А есть ли какая-нибудь логическая семантика у этого вашего пега?
я не уверен, что понимаю, что есть "логическая семантика", но PEG-и вполне себе строго определены, например, в статье, их представившей

https://bford.info/pub/lang/peg.pdf
источник

s

suhr in Compiler Development
Ну это описание рекурсивного спуска по-сути.
источник

VK

Vladimir Kazanov in Compiler Development
suhr
Ну это описание рекурсивного спуска по-сути.
Ну, LL-грамматики тоже можно реализовать через рекурсивный спуск. В PEG есть еще определение порядка применения правил в грамматике, еще больше упрощающие эту технику.
источник

VK

Vladimir Kazanov in Compiler Development
Напоминаю, что рекурсивный спуск это просто техника реализации, к формализму она отношения не имеет.
источник

s

suhr in Compiler Development
В случае PEG это фактически определение формализма.
источник

s

suhr in Compiler Development
Если посмотреть со стороны логического программирования, то PEG соответствует коду, в котором всюду понатыкали !.
источник

s

suhr in Compiler Development
Чтобы солвер не бектрекал.
источник

s

suhr in Compiler Development
Проблема в том, что прологовское ! не имеет логической семантики, это чистейшего рода костыль.
источник

YS

Yaroslav Schekin in Compiler Development
Vladimir Kazanov
в смысле? PEG это *другой* формализм, конечно, не такой традиционный, но значительно более удобный в разборе.
Вот именно. Т.е. они на обычные грамматики [очень] похожи исключительно внешне.
Мне кажется, что это должно сильно запутывать тех, кто привык к "классике".
Поэтому проблему неоднозначности они "решают" примерно так, как гильотина — проблему головной боли, IMHO. ;)
источник

f

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

VK

Vladimir Kazanov in Compiler Development
Yaroslav Schekin
Вот именно. Т.е. они на обычные грамматики [очень] похожи исключительно внешне.
Мне кажется, что это должно сильно запутывать тех, кто привык к "классике".
Поэтому проблему неоднозначности они "решают" примерно так, как гильотина — проблему головной боли, IMHO. ;)
А прикладным разработчикам кажется, что такие грамматики очень удобны. И если сторонники традиционного формализма считают, что тут что-то некрасиво, то лучше бы им предоставить конкретные прикладные последствия, иначе это просто ворчание консерваторов 😊
источник

VK

Vladimir Kazanov in Compiler Development
fldlg2
Гораздо больше они запутывают тех, кто ещё не успел привыкнуть ни к чему и выбирает, куда двигаться. В этом случае очень полезно заранее знать риски.
Те, кто не успел привыкнуть, обычно и разницы между LALR/LR/LL не понимают 😊 Им обычно все равно.
источник

VK

Vladimir Kazanov in Compiler Development
suhr
Чтобы солвер не бектрекал.
Ну, строгости ради замечу,  что в PEG решатель очень даже откатывается 😊
источник

f

fldlg2 in Compiler Development
Vladimir Kazanov
Те, кто не успел привыкнуть, обычно и разницы между LALR/LR/LL не понимают 😊 Им обычно все равно.
Не понимать разницу между LR и LL (и тем более между LARL и LR) относительно безопасно. Ну да, левая рекурсия, неудобно, что ж, можно покорячиться и обойти. Они примерно равномощны, и трюкачить с ними нужно примерно одинаково. Тут важнее разница между семейством YACC и ANTLR, т.е. реализациями генераторов с их подходами к неоднозначностям (например, обнаружение неоднозначностей в run time в некоторых популярных генераторах 😉)

Вот PEG — принципиально другой фрукт и другие риски.
источник

s

suhr in Compiler Development
Vladimir Kazanov
А прикладным разработчикам кажется, что такие грамматики очень удобны. И если сторонники традиционного формализма считают, что тут что-то некрасиво, то лучше бы им предоставить конкретные прикладные последствия, иначе это просто ворчание консерваторов 😊
Прикладные программисты считают, что PEG это отличное средство, чтобы сделать грамматику на коленке, но довольно отвратительное для полноценных грамматик.
источник

VK

Vladimir Kazanov in Compiler Development
suhr
Прикладные программисты считают, что PEG это отличное средство, чтобы сделать грамматику на коленке, но довольно отвратительное для полноценных грамматик.
Прикладные программисты последние лет *дцать используют метод рекурсивного спуска и даже не вникают в споры теоретиков.

@true_grue даже заметку писал на эту тему: https://github.com/true-grue/Compiler-Development/blob/master/docs/descent.md
источник

VK

Vladimir Kazanov in Compiler Development
suhr
Прикладные программисты считают, что PEG это отличное средство, чтобы сделать грамматику на коленке, но довольно отвратительное для полноценных грамматик.
я просто это к тому, что грамматика это не самоцель
источник

K

Kir in Compiler Development
fldlg2
Не понимать разницу между LR и LL (и тем более между LARL и LR) относительно безопасно. Ну да, левая рекурсия, неудобно, что ж, можно покорячиться и обойти. Они примерно равномощны, и трюкачить с ними нужно примерно одинаково. Тут важнее разница между семейством YACC и ANTLR, т.е. реализациями генераторов с их подходами к неоднозначностям (например, обнаружение неоднозначностей в run time в некоторых популярных генераторах 😉)

Вот PEG — принципиально другой фрукт и другие риски.
> обнаружение неоднозначностей в run time в некоторых популярных генераторах

ШТО
источник

VK

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

ШТО
полагаю, тут речь о shift/reduce и shift/shift, которые не случаются ни в LL, ни в PEG по определению 😊
источник

VK

Vladimir Kazanov in Compiler Development
хотя это не рантайм...
источник