【问题标题】:Usage of ParentMap in Clang在 Clang 中使用 ParentMap
【发布时间】:2019-12-12 09:48:51
【问题描述】:

网上好像没有示例,根据文档Path,ParentMap的构造函数接受“Stmt *ASTRoot”,这可能意味着稍后ParentMap实例会在“ASTRoot”下的AST子树下找到parent。但是如何获取翻译单元的根节点呢?我试过了

virtual bool VisitTranslationUnitDecl(TranslationUnitDecl *decl) {
    //decl->dump();
    Stmt *stmt = decl->getBody();
    mParentMap = new ParentMap(stmt);
    return true;
}

目标是围绕根节点创建一个 ParentMap,然后在扫描过程中在其他 Visit*** 回调中使用它。但是 decl->getBody() 为空。 decl->dump() 将打印所有内容,甚至第二次扫描 AST decl->getBody() 仍然为空。

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

【问题讨论】:

    标签: clang abstract-syntax-tree libtooling


    【解决方案1】:

    ParentMap 并不是真的打算单独使用。可以使用ASTContext::getParents,它构造和维护ParentMap

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-04-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-22
      • 1970-01-01
      • 2023-03-08
      • 2016-01-23
      相关资源
      最近更新 更多