ANTLR-подобный API для clang AST

Всего Clang/ LLVM N00B здесь. Я создаю многоязычный инструмент статического анализа, который имеет парсеры для отдельных языков и экспортирует AST с независимой маркировкой языка для обработки одного двоичного файла анализатора. До сих пор я использовал нативные парсеры для Ruby и Go и ANTLR для Swift.

В частности, ANTLR покорил меня благодаря API слушателя, в котором предусмотрено 3 универсальных метода:

void enterEveryRule(ParserRuleContext ctx) 
void exitEveryRule(ParserRuleContext ctx) 
void visitTerminal(TerminalNode node) 

Вы также можете подписаться на enter а также exit события для определенных правил, которые вы находите особенно интересными. Таким образом, для данного правила у вас будет четыре обратных вызова - enterEveryRule, enterParticularRule, exitParticularRule, exitEveryRule - в этом конкретном порядке. Существует также концепция TerminalNodeс вещами вроде литералов и т. д.

Так как это своего рода API, который кажется наиболее естественным для стоящей перед нами задачи, я хотел бы попросить вашего совета о том, как выполнить его репликацию в Clang. Я прошел этот SO-ответ и получил вдохновение, но я все еще не знаю, как работать с терминальными узлами.

0 ответов

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