Size: a a a

Compiler Development

2021 February 19

M

MrSmith in Compiler Development
Тут разговори о шаге от независимых до зависимых
источник

M

MrSmith in Compiler Development
Kir
LR гарантирует линейное время разбора.
Смотри, я вот захотел сделать парсер си, беру LR1 оно не едет?
источник

DP

Dmitry Ponyatov in Compiler Development
ну например есть ambiguose с двумя вариантами разбора — идём дальше параллельно сразу по двум ветвям разбора пока все лишние ветви не отвалятся
источник

M

MrSmith in Compiler Development
Не едет, я злой, я JS кодер, я выкидываю все и пишу рекурсивный спуск Directed By Robet B Weide
источник

K

Kir in Compiler Development
MrSmith
Смотри, я вот захотел сделать парсер си, беру LR1 оно не едет?
Это потому что грамматика С - это куча мусора. На LR(1) с приоритетами, я думаю, можно. Но LR(1) c приоритетами - это по мощности как пакрат
источник

s

suhr in Compiler Development
Берёшь GLR, получаешь синтаксический лес, вырубаешь деревья пока не останется только одно.
источник

YS

Yaroslav Schekin in Compiler Development
MrSmith
С резолв рулами ничего он не гарантирует
Потому что это уже не LR, вот и всё.
Аналогичная история с почти всеми современными движками "регулярных выражений".
В теории-то regexp-ы O(n), а вот эти regexen-ы — O(2ⁿ), упс. ;)
источник

K

Kir in Compiler Development
Тут вопрос в том, что нужно сделать - слабать за вечер нечто, напоминающее парсер, или сделать парсер линейного времени над непротиворечивой грамматикой.
источник

K

Kir in Compiler Development
suhr
Берёшь GLR, получаешь синтаксический лес, вырубаешь деревья пока не останется только одно.
@MRSMITH4 есть Tree-sitter кстати, он примерно так и работает
источник

s

suhr in Compiler Development
Yaroslav Schekin
Потому что это уже не LR, вот и всё.
Аналогичная история с почти всеми современными движками "регулярных выражений".
В теории-то regexp-ы O(n), а вот эти regexen-ы — O(2ⁿ), упс. ;)
Растовые регулярки ведут себя прилично.
источник

YS

Yaroslav Schekin in Compiler Development
MrSmith
Смотри, я вот захотел сделать парсер си, беру LR1 оно не едет?
C GLR — едет, например.
И вообще, кто Вас не заставляет разбирать точно в то, что делают обычно?
Нередко на практике разбирают надмножетсво языка, а потом уже "довырубают" неправильные деревья. ;)
источник

YS

Yaroslav Schekin in Compiler Development
Kir
@MRSMITH4 есть Tree-sitter кстати, он примерно так и работает
Так он как раз — GLR-парсер, да.
источник

K

Kir in Compiler Development
Так, а кто-нибудь знает - можно ли из LR(1)-с-приоритетами пролучить LR(1)-без-приоритетов путём трансформаций?
источник

YS

Yaroslav Schekin in Compiler Development
MrSmith
Не едет, я злой, я JS кодер, я выкидываю все и пишу рекурсивный спуск Directed By Robet B Weide
И все, кто пишет средства syntax highlighting, refactoring, static analysis и source transformation для этого языка, Вас потом тихо ненавидят. ;)
источник

K

Kir in Compiler Development
(что-то мне говорит, что нет, но всё же)
источник

M

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

M

MrSmith in Compiler Development
Программисту надо вывод в чел виде и кнопку, все плохо поехали за np
источник

K

Kir in Compiler Development
MrSmith
Не едет, я злой, я JS кодер, я выкидываю все и пишу рекурсивный спуск Directed By Robet B Weide
Я тоже всю жизнь парсил рекурсивным спуском. Потом мне надоело с матюками отлаживать и чинить чужие парсерА работающие за O(exp(N)) на разбор кортежей, и я решил написать себе LR. Кстати, рекомендую. В драгонбуке оно довольно точно описано, надо просто идти от LR(0) постепенно. Я сам 5 раз бросал это, сначала начав писать с конца. А в итоге сел и от простого всё написал. На JS будет труднее, да, потому что типов нет, а в книге типы "указаны" шрифтами, принадлежность к латинскому/греческому алфавиту и большими/маленькими буквами.
источник

K

Kir in Compiler Development
MrSmith
Программисту надо вывод в чел виде и кнопку, все плохо поехали за np
Разумеется, если я бы сел писать LR в задаче про разбор кортежей вида (((((a,b), c) ...,) за экспоненту, я бы щас там не работал.
источник

s

suhr in Compiler Development
В драконокниге оно так себе написано, но лучшего ресурса по LR похоже нет.
источник