【发布时间】:2013-11-13 17:49:22
【问题描述】:
我知道如果没有标题,它永远不会完全准确,因为 C++ 不是上下文无关的。
使用'A B(C);'的经典例子,表示可以识别为函数声明或对象定义。任何一个对我来说都很好。我只需要完全解析的文件。
我对代码的语义分析不感兴趣,只对语法和AFAIK 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 树?
谢谢!
【问题讨论】:
-
您需要 AST 还是令牌? IE。你需要做什么?
-
@Eugene:我们如何获取令牌信息?
标签: c++ parsing clang libclang