

静态分析:在程序运行前,编译时分析程序的可靠性,安全性等。
程序分析的目的:可靠性,安全性,编译优化,程序理解
不存在sound和complete的分析
soundness:保证覆盖所有的路径

在精度和速度之间,做一个有效的平衡。

编译器:将程序员写的高级source code 翻译成机器语言machine code。
首先是词法分析(regular expression),分析所有的词法是否正确, 分成tokens;然后进行语法分析(context free grammar),转化成AST树;分析语义(attribute grammar),生成decorated AST;如果要进行后续的优化,就要通过转化器转化成一种中间形式IR(一般是三地址码);把3地址码继续生成machine code交给机器执行。
比如代码优化,就是静态分析的一种应用。
首先通过编译器中IR之前的步骤生成三地址码,然后在IR的基础上静态分析。



IR 没有形式化的概念引入临时变量,等号右侧最多只有一个操作符号


SSA一种经典的IR转换方式

三地址码最终是为了转化成control flow graph,静态分析是在control flow graph的基础上进行分析的。
basic block:只能有一个入口,出口只能是最后一个指令。入口和出口都是唯一的。
浙公网安备 33010602011771号