Size: a a a

Compiler Development

2021 February 18

PS

Peter Sovietov in Compiler Development
Kir
Если завернуть все парсеры "токенов" в токенизаторы, то да. Я довольно долго пользовался парсеркомбинаторами, которые packrat-без-мемоизации, и это ну такое
И что же у Вас за packrat без запоминания? Не задумывались, почему техника вообще так называется?
источник

K

Kir in Compiler Development
Я знаю, почему она так называется. А ещё я знаю, что мало кто использует parsec и тому подобное добро)
источник

o⭐

omeleto ⭐️ in Compiler Development
MaxGraey
Трудно поддерживать в себе цинизм и ораторскую ярость, когда тебя так сытно кормят в JetBrains 😉 На самом деле было бы классно послушать Брагилевского, но боюсь он вряд ли готов прилететь в Киев сейчас
лучше, наверное, спросить, чем априорно отвечать за другого человека. зато был бы гвоздь программы.
источник

PS

Peter Sovietov in Compiler Development
Kir
Я знаю, почему она так называется. А ещё я знаю, что мало кто использует parsec и тому подобное добро)
Ну, ниша Haskell в компиляторостроении в целом достаточно маргинальна, поэтому какая разница, в принципе? :)
источник

K

Kir in Compiler Development
Ну, да. Даже окамль обходит.
источник

PS

Peter Sovietov in Compiler Development
Ocaml'овский Menhir, кстати, это, на мой взгляд, самый солидный пример использования и развития древней техники LR-парсеров.
источник

K

Kir in Compiler Development
Alex/happy ещё, но на них из крупного только сам компилятор хаскелля и написан.
источник

K

Kir in Compiler Development
Я себе недавно накарябал LR-парсер, чтобы понимать технологию.
источник

PS

Peter Sovietov in Compiler Development
Но я бы все-таки не отметал так огульно scannerless-парсеры. Это очень изящная и удобная штука.
источник

K

Kir in Compiler Development
У меня в scannerless-парсерах обычно был комбинатор tok :: Parser a -> Parser a, который запускал свой аргумент-парсер и съедал все пробельные символы/комментарии после него. Преимущество сканнера в том, что проблема решается постепенно и анализировать отступы - если придётся - гораздо проще.
источник

o⭐

omeleto ⭐️ in Compiler Development
Kir
Alex/happy ещё, но на них из крупного только сам компилятор хаскелля и написан.
не только. на гитхабе сотни реализаций тайпчекеров для зав-типов, большинство почему-то именно на Хаскелле
источник

K

Kir in Compiler Development
> почему-то

Кек.
источник

PS

Peter Sovietov in Compiler Development
Kir
У меня в scannerless-парсерах обычно был комбинатор tok :: Parser a -> Parser a, который запускал свой аргумент-парсер и съедал все пробельные символы/комментарии после него. Преимущество сканнера в том, что проблема решается постепенно и анализировать отступы - если придётся - гораздо проще.
Такие вещи обычно легко делаются с помощью правила (функции) высшего порядка. Но запоминание добавлять надо, иначе все становится грустно. Хитрость в том, что запоминание может быть выборочным.
источник

K

Kir in Compiler Development
Ну вот у меня как раз и да.
источник

PS

Peter Sovietov in Compiler Development
Kir
Ну вот у меня как раз и да.
Я к тому говорю, что это не нужно "прибивать гвоздями". В моей реализации я сначала тестирую грамматику безо всяких ухищрений. После этого добавляю где нужно комбинатор memo. "Где нужно", что характерно, обычно заканчивается заменой token на memo(token) :)
источник

K

Kir in Compiler Development
Вот поэтому я и хочу сделать аналог menhir-а. А потом, может быть, собрать какой-нибудь GLR над этим всем.
источник
2021 February 19

M

MrSmith in Compiler Development
Kir
Есть, вообще, какой-нибудь обзор вида "мы проанализировали X случаев применения LR(1) и это принесло такие-то и сякие-то проблемы?"
Есть
источник

M

MrSmith in Compiler Development
Я проанализировал один
источник

M

MrSmith in Compiler Development
И оно не едет для ambiguous, после этого охладил мечты типа статей марпы и трата
источник

M

MrSmith in Compiler Development
Вывод примерно следуюший - берешь парс ген? Будь готов стать разработчиком парсгена
источник