Comments 6
Не вдавался в сорцы.
Главный вопрос: поддерживает все регулярные грамматики или это аналог PEG-а?
Да, QapDSLv2 полностью поддерживает все регулярные грамматики, поскольку регулярные грамматики — это самый простой класс формальных грамматик, и их поддержка — базовая возможность любого генератора парсеров.
QapDSLv2+QapGen — это гораздо более мощный и гибкий инструмент, чем PEG. В отличие от PEG, который вроде является формализмом для однозначного синтаксического анализа с приоритетным выбором, QapDSLv2 позволяет описывать сложные контекстно-свободные конструкции, интегрируя грамматику с построением AST, сериализацией и трансформациями.
Вы не поняли вопрос. Всё что можно описать в ANTL4
Можно описать в этом?
Оно будет асимптотически так же эффективно по разбору?
Да, всё, что можно описать в ANTLR, можно описать и в QapDSLv2.
По производительности оба инструмента примерно сопоставимы, но в моих тестах с парсингом JSON`а QapDSLv2 быстрее чем ANTLR в 3.52 раза.
Не очень понятно, а какую проблему Ваша система пытается решить. Contextual keywords, language embedding, что-то ещё?
Сам синтаксис всё ещё довольно сложный и шумный (сравните с условными antlr и tree sitter). Встраивания фрагментов на C++ являются скорее недостатком, чем преимуществом: если уж мы полезли в генератор, то хочется в нём и оставаться.
Также, пример с выражениями Вам не просто так привели. Разумеется, есть классические примеры, как делать грамматику выражений с приоритетами. Но это довольно плохой подход. Хочется видеть хотя бы shunting yard/pratt parsing. Тут же вопрос: а какой parse tree Вы для этих выражений строите?... Помниться была статья, где паркинг питона ускоряли в 300 раз, просто устраняя вот эту лозу из дерева разбора.
QapGen: Создаём мощные парсеры на C++