Yantra — это генератор парсеров C++, который сначала строит полное AST, затем обходит его сверху вниз в отдельном проходе, вызывая семантические действия. В отличие от большинства генераторов LALR-парсеров (Yacc, Bison, Lemon), которые выполняют семантические действия во время разбора, Yantra позволяет действию родительского правила выполняться до посещения его дочерних элементов. Это позволяет одной грамматике определять несколько обходчиков, например, один генерирующий C++ и другой — Java. Классы AST и обходчика генерируются автоматически. Yantra имеет встроенный лексический анализатор с поддержкой режимов для вложенных комментариев, необязательный объединенный однострочный вывод с сгенерированной функцией main(), и требует только компилятор C++23. Он лицензирован под MIT и сейчас находится в версии 0.5.1, предварительно перед 1.0, поддерживается одним разработчиком.
Маленький пример грамматики демонстрирует поведение обхода сверху вниз: при разборе выражения "1 + 2 + 3" сначала выводится "Adding" (корень), затем — выводы чисел. Такой порядок возможен только потому, что полное дерево существует до выполнения любого действия.
Известные ограничения документированы на странице GitHub проекта. Репозиторий доступен по адресу https://github.com/TantrixAuto/yantra, и обратная связь и вопросы приветствуются поддерживающим.
Инструмент использует CMake для сборки и производит исполняемый файл ycc для генерации парсеров из файлов грамматики.
Ключевые сущности: Компании: TantrixAuto
Источник: Hacker News · Сводку подготовил HeadlinesBriefing