我正在运行一个演化算法,它自动生成代表抽象语法树的S表达式。从那里我生成C代码来创建一个可编译的程序。
对于每个生成的表达式,我需要计算在适应度计算中使用的圈复杂度。我注意到有可用的工具(例如metrics Eclipse plugin),但我希望能够分析更通用的程序表示。
我可以看到调用外部工具,但我认为这会显着增加我的执行时间。是否有一种通过考虑S表达式或抽象语法树的某种公式来计算圈复杂度的简单方法?
答案 0 :(得分:0)
如果您生成的程序是无转义的(例如“结构化”程序),您可以使用一个简单的规则来计算圈复杂度:
CC(p) = #conditionals +1
这是结构化程序的事实。如果你的程序是意大利面条控制流纠结,你只需要完整的定义。