Advertisement

Principles of Program Analysis-背景设置

阅读量:

目录

语法分类

抽象语法

示例

控制流图 control flow graph

数据流分析 data flow analysis

课后作业

后续


编译器通常使用静态分析来进行程序优化, 也可以帮助IDE进行智能提示. 如下便是一个例子:

复制代码
 #include <stdio.h>

    
  
    
 int main()
    
 {
    
     printf("Hello World");
    
  
    
     return 0;
    
     
    
     //IDE会提示不可达
    
     printf("Unreachable code");
    
 }
    
    
    
    
    AI写代码

静态分析的书真心不多(可能太小众了),这本书算一本.虽然比较老(20年前的书了),但是里面的思想现在还用得到.现在以及近期的博客都会介绍这本书的核心内容顺便附带同时读的论文内容.基于这本书,后来会介绍针对Python的一种静态分析(正在做的毕业设计).

首先定义一个简单的语言方便展示静态分析

语法分类

arge a n AExp 算数表达式
arge b n BExp 布尔表达式
arge S n Stmt 语句
arge x, y n Var 变量
arge n n Num 数字
arge ll n Lab 标签
arge op_a n Op_a 算数运算符
arge op_b n Op_b 布尔运算符
arge op_r n Op_r 关系运算符

抽象语法

arge a ::= x|n|a_1op_aa_2 ewline
arge b ::= true|false|notb|b_1op_bb_2|a_1op_ra_2
arge S ::= {\ell} | [skip]{ll}|S_1;S_2|if^{ll}thenS_1elseS_2| while^{ll}doS

示例

arge {1};[z:=1]{2}; while3 do ([z:=z*y]^4;[y:=y-1]^5);[y:=0]6

控制流图 control flow graph

根据维基百科,控制流图展示了一个程序在执行期间的所有可能路径.如下便是上述例子的控制流图

数据流分析 data flow analysis

根据维基百科,数据流图是一种计算在每个点信息的一种技术. 一般情况下,数据流分析基于控制流图.所以一般静态分析的第一步就是根据源程序构造控制流图.

数据流分析的结果就是在各个语句上的附加信息.

课后作业

  1. 如何给程序中的每个语句添加一个独一无二的标签?就如控制流图一样.

后续

[Principles of Program Analysis 数据流分析需要的信息]( "Principles of Program Analysis 数据流分析需要的信息")

全部评论 (0)

还没有任何评论哟~