LINUX.ORG.RU

История изменений

Исправление invy, (текущая версия) :

Напиши грамматику своего языка. (Да, твои выражения - это язык).
Приведи грамматику к форме LL(1) ну или LR(1).
Дальше скармливаешь результат парсер-генератору (в случае LL(1) можно написать ручками рекурсивный спуск, но зачем?), который по твоей грамматкие будет на выходе выдавать именночто prase tree, после чего ты делаешь преобразования с этим prase tree (удаляешь скобочки ненужные, делаешь вычисления прямо на месте, и в итоге получаешь AST.

a+(b|c)+d+(b|c) — дубликаты зависит от ситуации

Заодно построив грамматику, ты можешь случайно для себя узнать, что у тебя уже не context-free язык, а context-sensitive и парсер ты не напишешь просто так.

Исправление invy, :

Напиши грамматику своего языка. (Да, твои выражения - это язык).
Приведи грамматику к форме LL(1) ну или LR(1).
Дальше скармливаешь результат парсер-генератору (в случае LL(1) можно написать ручками рекурсивный спуск, но зачем?), который по твоей грамматкие будет на выходе выдавать именночто prase tree, после чего ты делаешь преобразования с этим prase tree (удаляешь скобочки ненужные, делаешь вычисления прямо на месте, и в итоге получаешь AST.

Заодно построив грамматику, ты мозешь случайно для себя узнать, что у тебя уже не context-free язык, а context-sensitive и парсер ты не напишешь просто так.

Исправление invy, :

Напиши грамматику своего языка. (Да, твои выражения - это язык).
Приведи грамматику к форме LL(1) ну или LR(1).
Дальше скармливаешь результат парсер-генератору (в случае LL(1) можно написать ручками рекурсивный спуск, но зачем?), который по твоей грамматкие будет на выходе выдавать именночто prase tree, после чего ты делаешь преобразования с этим prase tree (удаляешь скобочки ненужные, делаешь вычисления прямо на месте, и в итоге получаешь AST.

Исходная версия invy, :

Напиши грамматику своего языка. (Да, твои выражения - это язык).
Приведи грамматику к форме LL(1) ну или LR(1).
Дальше скармливаешь результат парсер-генератору, который по твоей грамматкие будет на выходе выдавать именночто prase tree, после чего ты делаешь преобразования с этим prase tree (удаляешь скобочки ненужные, делаешь вычисления прямо на месте, и в итоге получаешь AST.