我目前正在使用libclang为一个学校项目做静态代码分析。我已经把它设置好并运行起来,到目前为止,我已经设法获得了函数的文件位置和物理长度(行数),但是我想要得到的下一件事是函数的深度。
为了清楚起见,对于我来说,函数在任何给定行上的深度应该是该行周围嵌套的if/ for /while/等块的数量。假设采用标准语法,深度将与行开头的制表符/空格的数量相关。
一个函数的整体深度就是它的最深线的深度。例如,深度为2:
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
}
}发布于 2020-11-25 08:30:58
您可以通过编写一个AST visitor来实现这一点
当您输入FunctionDecl
CompoundStmthttps://stackoverflow.com/questions/64968455
复制相似问题