目录
编译器通常使用静态分析来进行程序优化, 也可以帮助IDE进行智能提示. 如下便是一个例子:
#include <stdio.h>
int main()
{
printf("Hello World");
return 0;
//IDE会提示不可达
printf("Unreachable code");
}
静态分析的书真心不多(可能太小众了),这本书算一本.虽然比较老(20年前的书了),但是里面的思想现在还用得到.现在以及近期的博客都会介绍这本书的核心内容顺便附带同时读的论文内容.基于这本书,后来会介绍针对Python的一种静态分析(正在做的毕业设计).
首先定义一个简单的语言方便展示静态分析
语法分类
算数表达式
布尔表达式
语句
变量
数字
标签
算数运算符
布尔运算符
关系运算符
抽象语法
示例
控制流图 control flow graph
根据维基百科,控制流图展示了一个程序在执行期间的所有可能路径.如下便是上述例子的控制流图
数据流分析 data flow analysis
根据维基百科,数据流图是一种计算在每个点信息的一种技术. 一般情况下,数据流分析基于控制流图.所以一般静态分析的第一步就是根据源程序构造控制流图.
数据流分析的结果就是在各个语句上的附加信息.
课后作业
- 如何给程序中的每个语句添加一个独一无二的标签?就如控制流图一样.