Size: a a a

Compiler Development

2020 November 20

а

а это кто in Compiler Development
hazer_hazer
Привет. Есть какой-нибудь чат, специализирующийся именно на самоделках по теме компиляторов/интерпретаторов. Понимаю, что и здесь такие люди есть, но тут в почти всегда обсуждают технологии, а не свою работу/хобби. Надеюсь вы понимаете о чем я
Для околооффтопа есть @LanguageDev
источник

h

hazer_hazer in Compiler Development
а это кто
Для околооффтопа есть @LanguageDev
Я и там есть...
источник

💎

💎 Денчик Дзенчик 💎... in Compiler Development
Всем привет! Помогите пожалуйста выяснить и дать ответ как все же это реализовать и что нужно менять, всё подробно описал в статье, так как в одно сообщение это бы не поместилось.
https://telegra.ph/Problema-parsinga-prodvinutyh-sintaksicheskih-konstrukcij-11-20
источник

PS

Peter Sovietov in Compiler Development
Про рекурсивный спуск, все же, полезно почитать. Вам нужен вариант с откатом(возвратом).
(в сторону) вот поэтому все-таки важно начинать с формализма, с грамматик, а не с кода при обучении синт. разбору.
источник

K

Kakadu in Compiler Development
начинать нужно с удобной штуки для парсинга (читайте парсер-комбинаторов), про грамматики глубоко читать я бы не рекомендовал.
А писать такое рекурсивным спуском в лоб — боль.
источник

K

Kakadu in Compiler Development
А если по теме, то не любой язык можно распарсить заглядывая вперед на 1. Иногда надо заглядывать вперед на неограниченное количество штук
источник

PS

Peter Sovietov in Compiler Development
Kakadu
начинать нужно с удобной штуки для парсинга (читайте парсер-комбинаторов), про грамматики глубоко читать я бы не рекомендовал.
А писать такое рекурсивным спуском в лоб — боль.
Угу, только комбинаторы это общий подход. Там и GLR может быть, и тот же рекурсивный спуск внутри. А главное, хороших руководств по созданию комбинаторов синт. анализаторов не так уж много: в каждом втором вас заставят монады реализовывать :)
источник

K

Kakadu in Compiler Development
Вранье, не надо там монады реализоваывать
источник

K

Kakadu in Compiler Development
@mn2234 Ещё рекомендуется почитать в вики, что такое lexer hack. Узнаете что проблем там больше, чем на повехности
источник

PS

Peter Sovietov in Compiler Development
Kakadu
Вранье, не надо там монады реализоваывать
Что значит "вранье"? Я говорю про monadic parser combinators, которые в лоб переписывают на десятках совершенно разных ЯП.
источник

💎

💎 Денчик Дзенчик 💎... in Compiler Development
@true_grue спасибо, про рекурсивный спуск слышал, но особо ничего не читал. Не подскажите где бы почитать?

@Kakadu18 про парсер-комбинаторы тоже слышал, но так сказать терминологией :)
источник

K

Kakadu in Compiler Development
Это и значит. Не обязательно реализовывать свои монады, чтобы писать парсер-комбинаторы. Там монады нужны только для понимания того, почему парсер-функции называются именно так, а не по-другому
источник

PS

Peter Sovietov in Compiler Development
Kakadu
Это и значит. Не обязательно реализовывать свои монады, чтобы писать парсер-комбинаторы. Там монады нужны только для понимания того, почему парсер-функции называются именно так, а не по-другому
Там, для начала, монады вообще не нужны. Вы, вероятно, забыли ссылки, которые я Вам по истории вопроса когда-то давал в этом чате. Тем не менее, это не отменяет того прискорбного факта, что во многих ЯП реализации синт. комбинаторов — кальки с Haskell.
источник

K

Kakadu in Compiler Development
Ладно, не будем разводить срач
источник

K

Kakadu in Compiler Development
@mn2234 Я не знаю, что у вас за язык, но парсер-комбинаторную либу найти люто рекомендую
источник

PS

Peter Sovietov in Compiler Development
💎 Денчик Дзенчик 💎
@true_grue спасибо, про рекурсивный спуск слышал, но особо ничего не читал. Не подскажите где бы почитать?

@Kakadu18 про парсер-комбинаторы тоже слышал, но так сказать терминологией :)
Посмотрите хотя бы на таком уровне: http://craftinginterpreters.com/parsing-expressions.html
источник

💎

💎 Денчик Дзенчик 💎... in Compiler Development
Peter Sovietov
Посмотрите хотя бы на таком уровне: http://craftinginterpreters.com/parsing-expressions.html
Спасибо, сейчас почитаю
источник

I

Ilmir in Compiler Development
Самое простое, это разбирать пока не встретится различие. После того, как встретилось, возвращать узел дерева нужного типа.
источник
2020 November 21

Miss Очепятка... in Compiler Development
Вам тут в принципе ответили. Не каждый ЯП реализуется заглатыванием вперёд на 1 лексему.  Есть два основных подхода. Закидываем в стек и после проверяем свертка или сдвиг. Сдвиг это значит мы кладём данные в стек push. А свёртки заменяет часть выражений(узлов дерева) лежащих в стеке на короткую запись.  Другой способ заключается в расщеплении состояний первый парсит один вариант другой другой потом выбирается наиболее предпочтительный. К примеру по жадному алгоритму выбирается тот вариант кто первый получил законченный вариант остановившись на терминальном символе.    Или выбирается тот который записан первым в формальной грамматике. Т.е. это уже правило языка которое определяет какое выражение главнее.
источник

KS

Khet Singh in Compiler Development
источник