我正在使用 clang 进行一些分析,我需要在 AST 中找到声明的父级。例如,在下面的代码中我有int x
我想获取它的父级,它应该是函数声明:
int main(int x) { return 0 }
我知道正如这个链接中提到的http://comments.gmane.org/gmane.comp.compilers.clang.devel/2152 http://comments.gmane.org/gmane.comp.compilers.clang.devel/2152有一个 ParentMap 类来跟踪父节点。但是,这仅代表 Stmt* -> Stmt* 的映射,我需要找到声明的父级。有谁知道我该怎么做?
你可以使用 AstContext::getParents() 来查找 ast 节点的父节点。
示例代码如下:
const Stmt* ST = str;
while (true) {
//get parents
const auto& parents = pContext->getParents(*ST);
if ( parents.empty() ) {
llvm::errs() << "Can not find parent\n";
return false;
}
llvm::errs() << "find parent size=" << parents.size() << "\n";
ST = parents[0].get<Stmt>();
if (!ST)
return false;
ST->dump();
if (isa<CompoundStmt>(ST))
break;
}
AstContext::getParents() 可以接收 stmt 参数或 decl 参数。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)