我可以使用 recursivevisitor 类遍历 clang AST 的特定子树,但我想做的是逐个节点遍历 clang AST。
如果有人能帮助我,我将不胜感激。
提前致谢。
最佳答案
RecursiveASTVisitor 可以做你需要的。
实现member methods TraverseDecl(Decl *x)
、TraverseStmt(Stmt *x)
和 TraverseType(QualType x)
用于您的 RecursiveASTVisitor` 派生类(例如 MyClass ) 会成功的。结合起来,这三种方法将带您到达 AST 中的每个节点。
例子:
class MyClass : public RecursiveASTVisitor<MyClass> {
public:
bool TraverseDecl(Decl *D) {
// your logic here
RecursiveASTVisitor<MyClass>::TraverseDecl(D); // Forward to base class
return true; // Return false to stop the AST analyzing
}
bool TraverseStmt(Stmt *x) {
// your logic here
RecursiveASTVisitor<MyClass>::TraverseStmt(x);
return true;
}
bool TraverseType(QualType x) {
// your logic here
RecursiveASTVisitor<MyClass>::TraverseType(x);
return true;
}
};
关于c++ - 如何遍历clang AST的所有节点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30805595/