Есть ли способ описать, как CST должен быть переведен в AST?

Я по сути интересуюсь тем, как можно было бы написать спецификацию, описывающую преобразование CST в AST. В декларативной (и, следовательно, языковой) манере.

CST отличаются от AST.

AST может быть даже создан без посредника CST.

Существует ли какой-либо декларативный "язык" (например, EBNF/BNF), который позволяет описать, как CST должен быть сопоставлен с AST? Конечно, реализация такого инструмента / библиотеки будет зависеть от языка (AST представлен через языковые структуры данных), но я ищу существующий проект, который делает это.

Подумайте об этом - я написал структуры данных для представления AST для некоторого языка в Objective-C. Я использую классы для представления узлов / специализированных узлов и т. Д. И т. Д. (Как это делается с большинством реализаций AST на языках ОО).

Я пишу своего рода "описание" мета, которое описывает, как необработанный CST (простая рекурсивная структура данных со строками в виде атомов) должен отображаться в мои классы. Правила упрощения и т. Д. (Удаляйте лишние скобки, бла-бла-бла). Затем я использую инструмент метапрограммирования, чтобы прочитать это описание, а затем сгенерировать код отображения (для CST -> AST).

Это возможно? Можно ли даже описать процесс элегантно каким-то образом в стиле БНФ?

0 ответов

Другие вопросы по тегам