我知道在没有头文件的情况下,C++语言并不是上下文无关的,因此翻译可能不会完全准确。
以经典的“AB(C);”为例,它可以被识别为函数声明或对象定义。对我来说,两者都可以接受。我只需要将整个文件解析完整。
我对代码的语义分析不感兴趣,只对语法分析感兴趣。据我所知,clang的语法规则是最好的之一。
问题在于,在某些情况下,当clang不知道类型时,它会避免一些声明,尽管我认为它可以正确解析。
请看以下示例。class.cpp的内容如下:
A::A() { }
A::~A() { }
void A::B() { }
A::C() { }
执行clang命令行应用程序:
$ 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树?
谢谢!