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");
}

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

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

语法分类

\large a \in AExp  算数表达式

\large b \in BExp  布尔表达式

\large S \in Stmt   语句

\large x, y \in Var 变量

\large n \in Num   数字

\large \ell \in Lab       标签

\large op_a \in Op_a  算数运算符

\large op_b \in Op_b   布尔运算符

\large op_r \in Op_r   关系运算符

抽象语法

\large a ::= x\ |\ n\ |\ a_1\ op_a\ a_2 \newline

\large b ::= true\ |\ false\ |\ not\ b\ |\ b_1\ op_b\ b_2\ |\ a_1\ op_r\ a_2

\large S ::= [x :=a ]^{\ell}\ |\ [skip]^{\ell}\ |\ S_1;S_2\ |\ if\ [b]^{\ell}\ then\ S_1\ else\ S_2\ | while\ [b]^{\ell}\ do\ S

示例

\large [y:=x]^{1};[z:=1]^{2}; while\ [y>1]^3\ do\ ([z:=z*y]^4;[y:=y-1]^5);[y:=0]^6

控制流图 control flow graph

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

数据流分析 data flow analysis

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

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

课后作业

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

后续

Principles of Program Analysis 数据流分析需要的信息

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值