Size: a a a

Compiler Development

2021 February 19

M

MrSmith in Compiler Development
Нельзя просто говорить, вот у нас очень хорошая теория, а вы все быдло и не смогли. В реальности так и выходит что resolve rules фигачатся, на языке таргета, дак еше и без генератора, зато нативно
источник

DP

Dmitry Ponyatov 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) является наибольшим формализмом для описания однозначных грамматик. Если у тебя вылез конфликт, то это потому, что информации в грамматике не хватило на однозначное решение.
а что DCG-грамматики никто не вспоминает — слишком сложно/ресурсоёмко в реализации?
источник

YS

Yaroslav Schekin in Compiler Development
suhr
Если мыслить в рамках генеративного подхода, то конечно, грамматика это не грамматика, и ничего невозможно.
Но таково определение грамматик! А иначе тут просто происходит подмена терминов, и не более того. :(
По-моему, @true_grue как-то давал хорошую ссылку про это... надо поискать.
источник

K

Kir in Compiler Development
Dmitry Ponyatov
а что DCG-грамматики никто не вспоминает — слишком сложно/ресурсоёмко в реализации?
Дак это те же парсеркомбинаторы
источник

s

suhr in Compiler Development
MrSmith
Нельзя просто говорить, вот у нас очень хорошая теория, а вы все быдло и не смогли. В реальности так и выходит что resolve rules фигачатся, на языке таргета, дак еше и без генератора, зато нативно
Ну это во многом вопрос вкуса. Бывает хороший вкус, а бывают генеративные грамматики.
источник

M

MrSmith in Compiler Development
Yaroslav Schekin
Но таково определение грамматик! А иначе тут просто происходит подмена терминов, и не более того. :(
По-моему, @true_grue как-то давал хорошую ссылку про это... надо поискать.
формальных
источник

M

MrSmith in Compiler Development
У нас неформальная
источник

K

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

M

MrSmith in Compiler Development
suhr
Ну это во многом вопрос вкуса. Бывает хороший вкус, а бывают генеративные грамматики.
Обвинение разработчиков через раз популярных инструментов?
источник

s

suhr in Compiler Development
В пользу логического подхода можно сказать ещё то, что от логики до категорий, как правило, всего один шаг.
источник

M

MrSmith in Compiler Development
Kir
RDP просто можно на коленке сделать, а LR сложнее
Дак может в этом и проблема, никому не нужна теория работающая в гиперпространстве
источник

YS

Yaroslav Schekin in Compiler Development
MrSmith
Не знаю, помойму везде recursive descent parser и это не нормально
Кстати, любопытно было бы посмотреть на список того, в каких языках (или их конкретных реализациях) что используется для parsing.
источник

K

Kir in Compiler Development
MrSmith
Дак может в этом и проблема, никому не нужна теория работающая в гиперпространстве
Я вот сейчас пытаюсь писать LR-парсер, для того, чтобы его можно было использовать не задумываясь о том как он работает.
источник

DP

Dmitry Ponyatov in Compiler Development
Kir
Дак это те же парсеркомбинаторы
мне показалось что они как-то связаны со смесью парсер-комбинаторов и  pattern matching в параметрах полиморфных функций эликсира
источник

K

Kir in Compiler Development
Dmitry Ponyatov
мне показалось что они как-то связаны со смесью парсер-комбинаторов и  pattern matching в параметрах полиморфных функций эликсира
Не, в прологе left-biased choice, а как в эрланге сделан паттерн матчинг - я не в курсе.
источник

M

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

K

Kir in Compiler Development
MrSmith
Еще раз алгоритм не важен, он может быть любой, но если нельзя по человечески разрешить ambiguose это все не очень, а касательно монад и тд Сомневаюсь что там сказанно используйте, и вот гарантируем вам время разбора
LR гарантирует линейное время разбора.
источник

DP

Dmitry Ponyatov in Compiler Development
а термин ambiguose для контекстно-зависимых грамматик применим?
источник

M

MrSmith in Compiler Development
С резолв рулами ничего он не гарантирует
источник

M

MrSmith in Compiler Development
Нет уже
источник