Comments 8
CLL в ISPA — переносимый язык семантических действий для генераторов парсеров. Объявление переменных, условий и циклов, генерация AST и кода на C++ без привязки к языку парсера. Пример, разбор и сравнение с ANTLR, Bison.
CLL - даже не гуглиться по хорошему. Сухо написано. Но я не знаю как написать лучше.
Заниматься семантическим анализом на стороне DSL - это такой вид мазохизма, как мне кажется. Считаю что всё это надо делать строго на стороне С++ и никак иначе. Может конечно и передумаю, но пока так.
Да, этот язык я придумал сам. То, что вы предалагаете делает ANTRL, но для парсинга сложных языков как C++ семантические действия в генераторе необходимы.
я делал парсинг С++ кода без "семантические действия в генераторе" - полёт нормальный. вот исходник парсера С++11 на QapDSL v1:
делался вот для это темы:https://gamedev.ru/flame/forum/?id=172020
а как вы парсили templates, <, <<, >, >>, или например T * T, или T::something. Это все требует семантику
я запретил операторы "<<" и ">>" внутри шаблонных параметров полностью продублировав логику семейства i_expr. затем там запретил всё что мешает парсить код. вот ключевой момент:
я выкинул целых два-три уровня с операторами "<<" и ">>" итд. проблемы с "T * T" и T::something не вижу.
считаю что символы для обжатия шаблонных параметров в С++ выбраны неправильно и это нужно исправлять. вот даже тему поднял когда-то:
https://gamedev.ru/flame/forum/?id=185614
я даже одному прогеру из яндекса который вроде как сидит в комитете стандартизации писал про это, но это не помогло.
T * T - в завимимости от T это объявление поинтера или умножение
с T::something проблем меньше, но все равно нужно знать это переменная или тип для более правильного lookup.
можно же просто жадно сожрать всю эту шаблоноту в std::string применяя простые правила поедания С++ кода, а затем когда наступит семантический анализ и будут известны все типы в текущем месте обхода дерева, тогда уже по кусочкам её парсить/анализировть учитывая контекст. думаю такая идея сработает.
CLL в ISPA: Семантические действия просто и мощно