gpt4 book ai didi

c++ - 在 Clang AST 中查找声明的父级

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:36:07 25 4
gpt4 key购买 nike

我正在使用 clang 进行一些分析,我需要在 AST 中找到声明的父级。例如,在下面的代码中,我有 int x 并且我想获取它的父级,这应该是函数声明:

int main(int x) { 返回 0 }

我知道这个链接中提到的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参数。

关于c++ - 在 Clang AST 中查找声明的父级,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27308691/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com