Я знаю, что он никогда не будет полностью точным без заголовков, потому что C++ не является контекстом.Как получить АСТ одного файла cpp с clang?
Использование классического примера «A B (C);» означает, что оно может быть распознано как объявление функции или определение объекта. Для меня это нормально. Мне просто нужно, чтобы файл полностью разбирался.
Меня не интересует семантический анализ кода, только в синтаксическом и AFAIK грамматика clang является одной из лучших.
Проблема в том, что в некоторых сценариях clang избегает некоторых деклараций, когда он не знает типы, хотя, я думаю, он может правильно разобрать его.
См. Следующий случай. Содержание class.cpp:
A::A() { }
A::~A() { }
void A::B() { }
A::C() { }
Выполнение приложения командной строки лязг:
$ clang -Xclang -ast-dump -fsyntax-only class.cpp
это просто признание, как AST узлы конструктора и последний метод.
typedef char *__builtin_va_list;
int A() (CompoundStmt 0x9a6a570 <class.cpp:3:8, col:10>)
int C() (CompoundStmt 0x9a6a600 <class.cpp:9:8, col:10>)
Есть ли способ получить полное дерево АСТ?
Спасибо!
вам нужно AST Do или жетоны? То есть что вам нужно сделать? – Eugene
@Eugene: как мы можем получить информацию о токенах? – ConsistentProgrammer