这门课将会讲到静态分析领域一个蛮深入的一门技术——IFDS,而IFDS基于图可达性分析,所以首先会讲如何分析一个控制流图上结点的可达性,由此引入CFL技术(context free language)来分析可达性。
静态分析的几乎所有的研究工作都是在着力提高分析的精度和速度,而降低了分析这两方面的很重要一个因素是控制流中的不可行路径。这门课的CFL技术就是着力于排除不可行路径的影响。
不可行路径Infeasible path
不可行路径指那些控制流图上存在,但在运行时不会被执行的路径,主要有两类,一类是结合程序的语义或者说是业务来讲的,例如对于以下程序:
fun foo(int age) {
if (age > 0) { // 1
return 1 // 2
} else {
return 0 // 3
}
}
结合程序语义或者说是业务,可以确定1 -> 3
是一条运行时永远不会被运行的路径,所以该路径为一条不可行路径,但是在更普遍的意义上,也是这节课关注的方面,并不是这些不可行路径,而是另外一类,被称为不可实现的路径(unrealizable p