# QapDSL — декларативное описание AST и парсеров для C++
BotHabr (tgi,2) → All – 12:27:22 2025-09-22
Опубликовано: Thu, 05 Jun 2025 14:19:06 GMT
Канал: Все статьи подряд / Assembler / Хабр
QapDSL — декларативное описание AST и парсеров для C++
QapDSL — это специализированный язык (DSL), который позволяет описывать абстрактные синтаксические деревья (AST) и правила их разбора для языков программирования, прежде всего C++. Такая формализация помогает автоматизировать построение парсеров, генерацию кода, анализ исходников и даже рефакторинг.
Зачем нужен QapDSL?
Компактно и наглядно описывать структуру и грамматику языка.
Автоматически генерировать C++-структуры, парсеры, сериализаторы и визиторы.
Ускорять эксперименты с языками, создавая прототипы компиляторов и анализаторов.
Упрощать анализ и рефакторинг сложных языков, в т.ч. C++.
Пример QapDSL-описания
Рассмотрим, как описывается объявление класса C++ на QapDSL:
t_class{
string keyword;
t_sep sep0;
string name;
t_sep sep1;
TAutoPtr<t_parents> parents;
t_sep sep2;
TAutoPtr<t_class_body> body;
t_sep sep3;
{
M+=go_any_str_from_vec(keyword,split("struct,class,union",","));
O+=go_auto(sep0);
M+=go_str<t_name>(name);
O+=go_auto(sep1);
O+=go_auto(parents);
O+=go_auto(sep2);
O+=go_auto(body);
O+=go_auto(sep3);
M+=go_const(";");
}
} Читать дальше →]]>
https://habr.com/ru/articles/916006/
BotHabr (tgi,2) → All – 12:27:22 2025-09-22
Опубликовано: Thu, 05 Jun 2025 14:19:06 GMT
Канал: Все статьи подряд / Assembler / Хабр
QapDSL — декларативное описание AST и парсеров для C++
QapDSL — это специализированный язык (DSL), который позволяет описывать абстрактные синтаксические деревья (AST) и правила их разбора для языков программирования, прежде всего C++. Такая формализация помогает автоматизировать построение парсеров, генерацию кода, анализ исходников и даже рефакторинг.
Зачем нужен QapDSL?
Компактно и наглядно описывать структуру и грамматику языка.
Автоматически генерировать C++-структуры, парсеры, сериализаторы и визиторы.
Ускорять эксперименты с языками, создавая прототипы компиляторов и анализаторов.
Упрощать анализ и рефакторинг сложных языков, в т.ч. C++.
Пример QapDSL-описания
Рассмотрим, как описывается объявление класса C++ на QapDSL:
t_class{
string keyword;
t_sep sep0;
string name;
t_sep sep1;
TAutoPtr<t_parents> parents;
t_sep sep2;
TAutoPtr<t_class_body> body;
t_sep sep3;
{
M+=go_any_str_from_vec(keyword,split("struct,class,union",","));
O+=go_auto(sep0);
M+=go_str<t_name>(name);
O+=go_auto(sep1);
O+=go_auto(parents);
O+=go_auto(sep2);
O+=go_auto(body);
O+=go_auto(sep3);
M+=go_const(";");
}
} Читать дальше →]]>
https://habr.com/ru/articles/916006/