ParentMap在Clang中的使用

ParentMap在Clang中的使用,clang,abstract-syntax-tree,libtooling,Clang,Abstract Syntax Tree,Libtooling,在线上似乎没有示例,根据文档,ParentMap的构造函数接受“Stmt*ASTRoot”,这可能意味着稍后ParentMap实例将在“ASTRoot”下的AST子树下找到父对象。但是如何获得翻译单元的根节点呢?我试过了 virtual bool VisitTranslationUnitDecl(TranslationUnitDecl *decl) { //decl->dump(); Stmt *stmt = decl->getBody(); mParentM

在线上似乎没有示例,根据文档,ParentMap的构造函数接受“Stmt*ASTRoot”,这可能意味着稍后ParentMap实例将在“ASTRoot”下的AST子树下找到父对象。但是如何获得翻译单元的根节点呢?我试过了

virtual bool VisitTranslationUnitDecl(TranslationUnitDecl *decl) {
    //decl->dump();
    Stmt *stmt = decl->getBody();
    mParentMap = new ParentMap(stmt);
    return true;
}
目标是围绕根nood创建一个ParentMap,然后在扫描过程中在其他Visit***回调中使用它。但是decl->getBody()为空。decl->dump()将打印所有内容,甚至第二次扫描AST时decl->getBody()仍然为空


如何获取AST的根Stmt?使用ParentMap的正确/更好的方法是什么?

ParentMap
实际上并不打算单独使用。您可以使用,它构造并维护
ParentMap