Компилятор CLang имеет опцию -emit-ast
, которая выводит абстрактное синтаксическое дерево, используемое для представления анализируемого языка.Будут представлены различные экземпляры шаблона.
AST представлен как в памяти, так и в XML-версии, поэтому вы можете:
- просто использовать вывод XML
- разберите его, затем создайте некоторый код C ++
- , создайте инструмент перезаписи (поддерживается непосредственно в CLang) и используйте сам AST
Для большинства проверок кода (включая проверку выбранных перегрузок)) Я обнаружил, что на самом деле чтение выходных данных XML (ну, конечно, их просмотр) было достаточно для моих нужд.