ImageVerifierCode 换一换
格式:DOCX , 页数:23 ,大小:189.91KB ,
资源ID:6348538      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/6348538.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(程序分析技术.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

程序分析技术.docx

1、程序分析技术第一讲:程序语言的发展过程任务:以程序为对象,分析其属性,如:值的获取与传播,活跃性应用:程序转换 程序理解 程序演化 程序逆向工程 程序验证与测试 程序优化 重构 自动并行化发展:机器语言:指令:二进制组成具有基本操作,左移、右移、加1缺点:可读性差(可理解性差)写程序困难(不方便)问题:程序的维护比较困难扩展 纠错 预防 适应 汇编语言:符号化了的机器语言 功能没有扩充可读性强高级程序设计语言:(1)过程( PASCAL,C,FORTRAN,PL1)特点:命令为基础,程序由一系列语句组成,语句的执行引起存储单元值的变化。程序的正确型(归纳断言指导)数学性质弱(副作用,变量值变化

2、)数据类型不够丰富程序的动静态结构差异大 Goto语言的争议(难以理解,难以查错,动静态差异大修改引起的副作用小,全局优化简单概念简单,效率高)(2)函数式语言(LISP,ML,HOPE,FP)程序由一组函数组成,通过调用执行程序。特点:数学性质好数据类型可自定义支持并行计算抽象级别高数据以表为基础(3)逻辑式语言(PROLOG)以谓词为基础,具有推理能力特定的应用领域抽象的问题求解公式处理专家系统人工智能等(4)对象式语言SmallTalk80特点:封装性 继承性 多态性第四代语言:特定领域的特殊类语言 高级语言的抽象 如:Oracle应用开发环境、Power Builder程序分析方法:静

3、态分析方法:(词法分析 语法分析 所需要的分析)动态分析方法第二讲:编译原理基础基本概念: 字母表: ,元素的非空有穷集合。 符号串:由字母表中的符号组成的任何有穷序列。或者如下定义:1. 空符号串是上的符号串 2. 若x是上的符号串,a是的元素,则xa是上的符号串 3. y是上的符号串,当且仅当它可以由1和2导出 符号串的连接:设x和y均是字母表上的符号串,它们的连接是把y的所有符号顺序接在x的符号之后所得到的符号串。 符号串的方幂:设x是字母表上的符号串,把x自身连接n次得到的符号串z, 称作符号串x的n次幂,记作 z=(幂形式) ,特别地:x0= 前缀和后缀:设x是字母表上的符号串,x=

4、yz ,则y是x 的前缀,z 是x的后缀,特别是当z时,y是x的真前缀;y时,z是x的真后缀。 子字符串:非空字符串 x ,删去它的前缀和后缀后所得到的字符串称为 x 的子字符串,简称子串。如果删去的前缀和后缀不同时为,则称该子串为真子串。 符号串集合:若集合A中的所有元素都是某字母表上的符号串,则称A为该字母表上的符号串集合。 符号串集合的乘积:设A、B 是两个符号串集合,AB表示A与B的乘积,则定义AB=xy|(xA)(yB) 符号串集合的方幂:设A是符号串集合,则称 Ai 是符号串集合 A的方幂,其中i 是非负整数。A0=, A1 =A, A2 =AA, , An =AA A 符号串集合

5、的正闭包:A+=A1A2A3 符号串集合的星闭包:A*= A0A1A2A3 2 正则表达式 定义:RE为定义在上的正则表达式则 ,RE 若a,则aRE 若e1,e2RE,则e1e2,e1|e2,e1+RE 语义函数(解释函数)L L()=,L()= 若a 则L(a)=a 若e1,e2RE则L(e1e2)= L(e1)L(e2) L(e1|e2)= L(e1)L(e2) L(e1+)= L+(e1)Eg:ab*表示所有以字母a开头的后面跟了n个(包括)0个b的字符串 a(a|b)*表示所有以a开头的字符串3 自动机定义:一个DFA是一个5元组(S,S0,F),其中S是状态集合,是字符集,是转换函

6、数(转移函数)SS ,S0为初始状态S0S,F为终止状态集合,FS。两种表示形式 ( 转换图 转换矩阵)Eg: 确定有限状态自动机 M=(a, b,S, U, V, Q, f, S, Q),其中f定义为: f (S, a)=U f (V, a)=U f (S, b)=V f (V, b)=Q f (U, a)=Q f (Q, a)=Q f (U, b)=V f (Q, b)=Q词法分析:功能:读源程序的字符序列,逐个拼出单词,并构造相应的内部表示,同时检查源程序中的词法错误。单词:所谓单词是指语言中具有独立含义的最小的语义单位。Token:单词的内部表示。“程序语言的操作对象(只能)是该语言规

7、定的各种数据。”编译程序是用某种程序语言书写的程序,其操作对象是一般程序中的各种语法单位。 单词的一种分类:识别常数的自动机文法概述定义文法G定义为四元组(VT,Vn,S,P) VT是有限的终极符集合 Vn是有限的非终极符集合 S是开始符,S Vn P是产生式的集合,且具有下面的形式:,其中, (VTUVn)* 分类 O型文法:也称为短语文法,其产生式具有形式: ,其中, (VTVN)*,并且至少含一个非终极符 。 1型文法:也称为上下文相关文法。它是0型文法的特例,要求| | (S例外,但S不得出现于产生式右部)。 2型文法:也称为上下文无关文法。它是1型文法的特例,即要求产生式左部是一个非

8、终极符: A 。 3型文法:也称为正则文法。它是2型文法的特例,即产生式的右部至多有两个符号,而且具有下面形式之一: A a ,A a B 其中A,B VN ,a VT 。 推导(直接推导):如果A是一个产生式,则有A ,其中表示一步推导(用A )。这时称是由A直接推导的。 的含义是,使用一条规则,代替左边的某个符号,产生右端的符号串。 + : 表示通过一步或多步可推导出 * : 表示通过0步或多步可推导出 句型:如果有S* ,则称符号串为CFG的句型 。我们用SF(G)表示文法G的所有句型的集合。 句子:如果只包含终极符,则称为CFG的句子。 语言:L(G)= u| S + u ,u VT*

9、 文法G所定义的语言是其开始符所能推导的所有终极符号串(句子)的集合。 最左(右)推导:如果进行推导时选择的是句型中的最左(右)非终极符,则称这种推导为最左(右)推导,并用符号lm(rm)表示最左(右)推导。左(右)句型:用最左推导方式导出的句型,称为左句型,而用最右推导方式导出的句型,称为右句型(规范句型)。结论:每个句子都有相应的最右和最左推导(但对句型此结论不成立) 短语:设S是文法的开始符,是句型(即有S *),如果满足条件:S* A A+ VT+ 则称是句型的一个短语。 任一子树的树叶全体(具有共同祖先的叶节点符号串)皆为短语。 直接短语(简单短语):如果满足条件:S* A A VT

10、+ 则称是句型的一个简单短语。 任一简单子树的树叶全体(具有共同父亲的叶节点符号串)皆为简单短语。 句柄:一个句型可能有多个简单短语,其中最左的简单短语称之为句柄。 语法分析树(简称分析树)用来描述句型的结构,是句型推导的一种树型表示。文法 G=(VN,VT,S,P),则称满足下面条件的树为G的一棵语法分析树: 每个结点都有G的一个文法符号,并且根结点标有初始符S,非叶结点标有非终极符,叶结点标有终极符或非终极符或。 如果一个非叶结点A有n个儿子结点(从左到右)为 X1,X2,.,Xn,则G一定有产生式 AX1X2 .Xn 。 线性推导:我们称用符号进行的推导为线性推导 。 树型推导与线性推导

11、的不同:线性推导指明了推导的顺序,而树型推导则没有指明推导的顺序。因此,句型一般只有一棵分析树(如果无二义性),而线性推导则可以有很多棵分析树。 二义性文法:如果一个文法的某个句型有两棵不同的语法分析树,则称该文法二义性为二义性文法。例:文法G=( +,*,i,(,), E, E, P),其中P为:E i E E + EE E * E E ( E )句型i*i+i 可能的推导:推导1: E E + E E * E + E i * E + E i * i + E i* i + i推导2: E E * E i * E i * E + E i * i + E i * i + i 语法分析分类自顶向下

12、递归下降法LL(1)方法自底向上简单优先方法LR(0)方法SLR(1)方法LR(1)方法LALR(1)方法自顶向下思想与例子:思想:从文法开始符出发试图推导出所给的终极符串例子:Gz :1Z aBd2 B d3 B c4 B bB自底向上思想和实例:思想:从待分析的符号串开始,自左向右进行扫描,自下而上进行分析,通过反复查找当前句型的句柄,并使用产生式规则将找到的句柄归约为相应产生式的左部非终极符,直到将输入串归约为文法的开始符。(移入-归约分析)第三讲:元程序设计基础知识:词法分析1. 基本概念2. 描述工具1) 正则表达式2) 自动机3. 实现词法分析器注意的问题语法分析1. 形式语言2.

13、 分析原来自顶向下的语法分析自底向上的语法分析语法制导: 分析的过程生成中间表示元程序: 定义:处理程序的程序 组成:1 预处理:把源程序变成一种中间表示(经过词法分析,语法分析)2元级操作:提供最基本的操作(根据需求,用户可选择如何操作)3后处理:有必要把中间表示转为源代码中间表示第四讲:数据流分析技术数据流分析技术是对源程序分析、获取程序中变量定值和传播的情况,帮助理解程序中的数据流动情况定义一、基本块是一个顺序执行的命令序列。进入一个基本块,必须从第一条命令进入,退出基本块,必须由最后一条命令退出。特点:后续执行情况可判断。定义二、程序图是一个有向图,它的结点为基本块,有一个入口结点(无

14、前驱结点)和一个出口结点(无后续结点)扩展:常用的程序图有三种表示(流程图 N-S图 PAD图)定义三、定值在基本块当中,若有d: x:=e,则称有对x的定值,d: 为 x的定值点。(注:d:为程序中引入的标识,对程序无影响)定义四、注销若有对变量x的赋值x:=,则程序注销了x的原定值。用killB表示B中被注销的所有变量之集。定义五、向下暴露的定值 设(Bi,di) 为x的一个定值,若从di+1到Bi的出口再无对x的定值,则称x的di的定值为向下暴露的定值,并用defBi表示Bi中的所有向下暴露定值的变量之集。定义六、可能到达的定值 说在(Bi,di)点x定值可能到达 (Bj,dj)点 ,若

15、从(Bi,di)存在一条路,且在该路上无x的定值。可到达的定值数据流方程inB*=,B*为入口块。;outB=defB (in(B)-kill(B) )inB = (outBi) i=1,2,n;Bi为B的前驱结点其中inB表示在B入口处有定值的变量之集outB表示定值可到达B出口处的变量定值之集实例:定义七、定义性出现,使用性出现 称第一次出现在赋值命令左部的变量出现(即x:=第一次出现)为变量(x)的定义性出现,而称其他部位中的变量出现为其使用性出现定义八、向上暴露的使用 在(Bi,di)有x的使用性出现,若从Bi的入口到di-1点无对x的赋值。则称x在(Bi,di)点的出现为向上暴露的使

16、用,用use_liveB表示B中所有向上暴露的使用定义九、变量的活跃性说变量x在(Bi,di)点活跃,若:1.存在一点(Bj,dj)有x的使用性出现。2.从(Bi,di)到(Bj,dj)存在一条通路,且在该路上无对x的定值。定义十、注销活跃性若在某一点(Bk,dk) 有X:=,则称注销X的活跃性活跃变量的数据流方程in_liveB=use_liveB(out_liveB- kill_liveB)out_liveB= in_liveBi Bi为B的后续out_liveB*= B*为出口块其中in_liveB=x|x在B入口处活跃out_liveB=x|x在B出口处活跃use_liveB=x|B中

17、所有局部向上暴露使用的变量kill_liveB=x|B注销其活跃性的变量。定义十一、过程调用块 把过程调用P(e1,en)定义为一个独立的基本块,称为过程调用块 。定义十二、过程的返回块 调用块的接续为返回块(或return的后续块)难点:1. 下标变量的分析2. 别名问题第五讲:数据流分析技术应用第一个应用:检测数据流异常1. 数据流异常情况:1) 变量无定值而使用;2) 变量重复定值;3) 变量定值无使用。检测:针对第一种情况(无定值而使用)in_dB:表示在B入口处所有定值的变量之集;out_dB:表示B在出口处所有定值的变量之集;def_dB:表示B中所有定值的变量之集。数据流方程:i

18、n_dB*= B*为入口块in_dB =(或)i=1,2n(out_dBi) Bi为B的前驱块out_dB=def_dBin_dB结论:若in_liveBin_dB,则必有变量无定值而使用;特例:若in_liveB*,则必有变量无定值而使用.针对第2和3中情况:in_ddBi: 表示块B入口处所有定值而未使用的变 量之集;out_ddBi:表示块B出口处所有定值而未使用的变量之集;def_dd1Bi=x|x在(B,di)点定值,且从(B,d1). (B,di)无x的使用性出现。def_dd2Bi=x|x在(B,di)点定值,且从(B,di+1)到B出口,无x的使用性出现。in_ddB*= B*

19、为入口块 in_ddB=(或)out_ddB out_ddB=def_dd2B(in_ddB-useB)结论:若in_ddBdef_dd1B,则有变量重复定值;若in_ddB-in_liveBi,则有变量定值而未使用,或重复定值。若out_ddB*, B*为出口块,则有变量定值而未使用。程序优化:全局常表达式节省基本块的常表达式节省 vvvl问题:利用的信息不充分解决办法: 定义:常量定值若在块B中有x:=c,其中c是常数,且该定值是向下暴露的,则称x有一个常量定值,记为xc。 定义: 注销常量定值若有x:=E,则称注销了x的常量定值。 定义: 广义常量定值 若块B中有向下暴露的定值x:=E,

20、且 E的值可计算为一个常量c,则称产生一个广义常量定值xc。 定义: 注销广义常量定值 若有x= 则称注销了广义常量定值数据流方程:in_acB0= B0为入口块in_acBi=j=1,2,n out_acBj,Bj为Bi的前驱out_acBi=def_acBiU(in_acBi-kill_acBi)优化过程: 建立数据流方程 求解 对每一基本块进入优化 把in-ac(B)填入vvl 按原方法优化例子:in-acB1 = out-acB1 = x.1,y.2in-acB2 = x.1,y.2out-acB2 = x.1,y.2,z.3,b.4in-acB3 = x.1,y.2 out-acB3

21、 = x.1,y.2,z.3,b.4in-acB4 = x.1,y.2,z.3,b.4 out-acB4 = x.1,y.2,z.3,b.4,k.7,u.9,r.16 公共子表达式节省 定义:表达式定值 在块B中,若有d: x:=E,则称有表达式E的定值,d为定值点若从di+1到B的出口没有对表达式E中变量的赋值,则称B定值了表达式E 定义:注销表达式定值 若有 x:=E,且x出现在表达式E中,注销了E的定值。数据流方程:in_eB0 = B0为入口块out_eBi = def_eBi (in_eBi-kill_eBi) in_eBi = Bjpre(Bi)out_eBj Bj为Bi的前驱需要

22、注意的两个问题: 形式相同的表达式未必能节省(已解决) 形式不同的表达式也可能节省(未解决) 定义:等式定值 在块B中,若有x:=y。且从di+1到B出口无对x或y的赋值,则称B有了一个等式定值。即x=y 定义:注销等式定值 若有对x的赋值x:=,则称注销了所有x的等式定值。数据流方程in_eqB0 = B0为入口块out_eqBi = def_eqBi(in_eqBi-kill_eqBi)in_eqBi = Bjpre(Bi)out_eqBj利用等式定值和表达式定值,可以解决形式不相同但语义相同的表达式节省问题。 例如: X:=A*B 1 C:=A 2 Y:=C*B 3 由2可知13等价第六

23、讲:一种信息流分析技术一:处理的语言S- skip |V:=e |If e then s else s |If e then s |s; s |While e do s选择的原因:结果定理基本定义定义:设S为一个语句,若在S中有V:=e,一则称S定义了v。用Ds表示S定义的所有变量之集。设S为一个语句,从G(S)入口到G(S)出口存在一条路,且在该路上无对变量x的赋值,则称S保护了x。用Ps表示S保护的所有变量之集。定义:变量与表达式的关系若变量v在G(S)入口处值,直接或间接参与了表达式e的计算,则说v和e具有关系,记为vS e或者(v, e) S。定义:表达式与变量的关系若表达式e直接或间

24、接参加变量v在G(S)出口处值的计算,则称e和v具有关系,记为eS v或者(e, v) S。定义:变量与变量的关系 S = SS (v, v) | vPS解释,v1Sv2,v在G(S)的入口值参与v2在G(S2)出口值的计算。v1Sv2,v1在G(S)的入口值可? G(S)的出口计算方法空语句 S: skip; Ds = , ps= Vs =, s = ps = (v, v) | vps赋值语句S: v := e; DS = v, PS= V- vS = (v, e) | vV (e), S = (e, v)S = (v, v) | vuse (e) (v, v)| v PS顺序语句S: A;

25、B DS= DA DB, PS= PA PBS = A AB, S = ABBS = AB条件语句S:if e then A else BDS= DA DB, PS= PA PBS = (v, e)| v use(e) A B S = AB (e, v)| v (DA DB)S = AB (v, v)| v use(e),vDA DB) 简单条件语句s:if e then Aelse部分为skip可用上述规则计算。循环语句S: while e do A DS= DA, PS= V S =A* (v, e)| v use (e)A) S = (e, v)| v DAA)A* S = 公式计算应用

26、:1.看某一输入变量对那些输出变量有影响设vVi,v”Vo,若(v,v” ) 成立,则v 对v ”有影响。影响集(v ,v ”)v ”Vo, (v ,v ”) 2.看那些输入变量对某些输出变量的影响给定vv” ,v| (v,v ”) vv” 被影响集对v ” 有影响3.无用的输入变量若输入变量影响的输出变量集为空,则该输入变量对程序的运行结果无影响。4.无效语句v:=e, (e, v)|vVo=,则该语句可用skip替换或含有错误。5.对循环语句的分析设有while e do A,定义一个G(S),点集为DA,边集为A定义:稳定表达式e的稳定长度设e是关于s稳定的,其稳定长度用(e)表示。定义

27、如下:(e) =max(v) |vuse(e)+1。结论:任意一个稳定变量,当循环的次数到达一个定值(稳定长度+1)时,其值不会改变。任意一个稳定表达式,当循环的次数到达一个定值(稳定长度+1)时,其值不会改变。若while e do A中的e是稳定的,很有可能出错(陷入死循环)。应用: 可根据上述分析结果,进行应用。例如: 部分求值的程序例化(循环展开)第七讲:程序切片一:引言二:基本概念定义一、控制流图控制流图CFG=(N,E,S,e,v)是一个有向图,其中,N是结点集,程序中的语句和消词属于该集,E是边集,语句n,m之间的控制关系用(n,m) E表示,记为 n mS,e分别为开始结点和终

28、点结点V E true, false, 谓词输出边标true或false,其它边标定义二 、CFG的路径,路径可到达,可实现路径 若任意1i k-1,G中的一个结点序列P=. 都满足ni ni+1,则称P为G的一个路径。 如果G中存在一条路径则称p是q的可到达的,记为q p。 G中的一条路径是程序的一条可执行序列,则称是可实现的。定义三、必经点1. 从开始点s到n的所以路径都经过m,则称m为n的前必经点。2. 从n到出口e的所以路径都经过m,则称m为n的后必经点。定义四、控制依赖如果结点n,m满足下面条件,则称n 控制依赖m,记为n m1.G上存在一条路,n是mi的后必经点1i k.2.n不是m的后必经点。3.若m是G的唯一的开始结点,则m的所有后必经点都控制依赖于m。 定义五、数据依赖 如果结点m,n满足下面条件,则称n 数据依赖于m,记n m,1. 存在一个变量v,有vdef(m)ref(m)2. 存在(m,m1,mk,n)且vdef(

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1