Size: a a a

Compiler Development

2021 February 19

s

suhr in Compiler Development
Если мыслить в рамках генеративного подхода, то конечно, грамматика это не грамматика, и ничего невозможно.
источник

K

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

s

suhr in Compiler Development
Даже конъюктивные грамматики.
источник

s

suhr in Compiler Development
Поэтому генеративный подход заведомо ущербен.
источник

s

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

M

MrSmith in Compiler Development
Смелое утверждение
источник

s

suhr in Compiler Development
MrSmith
Смелое утверждение
Читай пейпер же.
источник

M

MrSmith in Compiler Development
Осталось придумать как конвертировать это в разбор с++
источник

M

MrSmith in Compiler Development
Хорошо в выходные прочту
источник

K

Kir in Compiler Development
MrSmith
Осталось придумать как конвертировать это в разбор с++
С++ не надо разбирать, его надо разбомбить с орбиты и засыпать солью. Бертолетовой солью.
источник

M

MrSmith in Compiler Development
Я просто одного не понимаю, раз все умные и все придуманно, почему не едет то ничего
источник

K

Kir in Compiler Development
Потому что C++ это промотходы. Там столько легаси, что про АААА.
источник

YS

Yaroslav Schekin in Compiler Development
Kir
У меня есть есть подозрение, что С++ и многие другие грамматики на LR(1) вообще никак.

Преимущество LR(1) над там же packrat, который может в наверное почти любые CFG (и даже леворекурсивные, с определёнными хаками) грамматики в том, что в LR(1) конфликты надо разрешать явно, а пакрат/PEG делают это автоматически. И то, что тебя LR заставит разруливать сразу, в пакрате вылезет потом.

В LR(1) "разрешение конфликтов" выглядит так: если в одном и том же верхнем состоянии (наборе продукций) появляется несколько действий на 1 токен, и они отличаются только lookahead'ом (Reduce (A -> a B c . / {e d} & Reduce (A -> a B c . / {f e} при следующем символе e), то мы их мержим (Reduce (A -> a B c . / {e d f}), иначе это конфликт.

Судя по всему, LR(1) является наибольшим формализмом для описания однозначных грамматик. Если у тебя вылез конфликт, то это потому, что информации в грамматике не хватило на однозначное решение.
PEG, строго говоря, вообще "не может в грамматики", опять-таки — он "внешне похож" на них, вот и всё.

> а пакрат/PEG делают это автоматически.

Да, лечение головной боли путём отрубания головы, очень удобно. ;)

> Судя по всему, LR(1) является наибольшим формализмом для описания однозначных грамматик.

А LR(k) к ним приводятся (подсмотрел). ;) Может, есть и ещё подобные классы грамматик, но я о них не знаю.
источник

K

Kir in Compiler Development
Yaroslav Schekin
PEG, строго говоря, вообще "не может в грамматики", опять-таки — он "внешне похож" на них, вот и всё.

> а пакрат/PEG делают это автоматически.

Да, лечение головной боли путём отрубания головы, очень удобно. ;)

> Судя по всему, LR(1) является наибольшим формализмом для описания однозначных грамматик.

А LR(k) к ним приводятся (подсмотрел). ;) Может, есть и ещё подобные классы грамматик, но я о них не знаю.
> > а пакрат/PEG делают это автоматически.

> Да, лечение головной боли путём отрубания головы, очень удобно. ;)

Вот и я о том же
источник

K

Kir in Compiler Development
И разработчики С++ продолжают приваривать к нему всё, что найдут на свалке.
источник

YS

Yaroslav Schekin in Compiler Development
MrSmith
Везде рекурсиные спуски
Это в очередном, сто пятидесятом компиляторе C++, на котором "мир компиляции" начинается и заканчивается? ;)
Используются генераторы в production languages, на самом деле.
источник

K

Kir in Compiler Development
MrSmith
Везде рекурсиные спуски
LR - это рекурсивный подъём, так-то. Я видел парсер рекурсивного подъёма для tezos-овского michelson написанный руками. Вопрос как и ~на~ зачем остаются открытыми.
источник

YS

Yaroslav Schekin in Compiler Development
Я почитаю, спасибо! А Вы номер относящейся к делу страницы не помните? ;)
источник

M

MrSmith in Compiler Development
Не знаю, помойму везде recursive descent parser и это не нормально
источник

s

suhr in Compiler Development
43, Inference Rules and Parse Trees
источник