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. я прошел сквозь этот так ответ и я получил некоторое вдохновение, но я все еще не знаю, как работать с терминальными узлами.

2

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …