首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用libclang获取函数的深度?

如何使用libclang获取函数的深度?
EN

Stack Overflow用户
提问于 2020-11-23 20:29:35
回答 1查看 87关注 0票数 0

我目前正在使用libclang为一个学校项目做静态代码分析。我已经把它设置好并运行起来,到目前为止,我已经设法获得了函数的文件位置和物理长度(行数),但是我想要得到的下一件事是函数的深度。

为了清楚起见,对于我来说,函数在任何给定行上的深度应该是该行周围嵌套的if/ for /while/等块的数量。假设采用标准语法,深度将与行开头的制表符/空格的数量相关。

一个函数的整体深度就是它的最深线的深度。例如,深度为2:

代码语言:javascript
复制
int foo()
{
    int n = 0; // Depth 0
    for (int i = 0; i < 10; ++i)
    {
        n = bar(i); // Depth 1
        if (i < n)
            ++n; // Depth 2, deepest line
    }
}
EN

回答 1

Stack Overflow用户

发布于 2020-11-25 08:30:58

您可以通过编写一个AST visitor来实现这一点

当您输入FunctionDecl

  • Increment depth时,
  • 将depth设置为零每次您输入一个类似CompoundStmt
  • Decrement depth的节点时,每次离开这些节点时,depth
  • 应为零,并且您可以跟踪整个过程中的最大深度。
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64968455

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档