hbn*_*991 12 c++ traversal clang abstract-syntax-tree
我可以使用recursivevisitor类遍历clang AST的特定子树,但我想要做的是按节点遍历clang AST节点.
如果有人能帮助我,我真的很感激.
提前致谢.
ret*_*idi 18
RecursiveASTVisitor可以满足您的需求.
实现成员方法 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;
}
};
Run Code Online (Sandbox Code Playgroud)