计算生成的程序树在运行时的圈复杂度

时间:2015-07-06 13:38:50

标签: code-analysis cyclomatic-complexity

我正在运行一个演化算法,它自动生成代表抽象语法树的S表达式。从那里我生成C代码来创建一个可编译的程序。

对于每个生成的表达式,我需要计算在适应度计算中使用的圈复杂度。我注意到有可用的工具(例如metrics Eclipse plugin),但我希望能够分析更通用的程序表示。

我可以看到调用外部工具,但我认为这会显着增加我的执行时间。是否有一种通过考虑S表达式或抽象语法树的某种公式来计算圈复杂度的简单方法?

1 个答案:

答案 0 :(得分:0)

如果您生成的程序是无转义的(例如“结构化”程序),您可以使用一个简单的规则来计算圈复杂度:

CC(p) =  #conditionals +1

这是结构化程序的事实。如果你的程序是意大利面条控制流纠结,你只需要完整的定义。