程序设计语言编译原理(第三版)第7章

程序设计语言编译原理(第三版)第7章

ID:37925493

大小:1.10 MB

页数:67页

时间:2019-06-02

程序设计语言编译原理(第三版)第7章_第1页
程序设计语言编译原理(第三版)第7章_第2页
程序设计语言编译原理(第三版)第7章_第3页
程序设计语言编译原理(第三版)第7章_第4页
程序设计语言编译原理(第三版)第7章_第5页
资源描述:

《程序设计语言编译原理(第三版)第7章》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、1第七章 语义分析和中间代码产生优化器语法分析器静态检查器中间代码产生器中间代码一般情况下,在词法分析程序和语法分析程序对源程序的语法结构进行分析之后,要么,由语法分析程序直接调用相应的语义子程序进行语义处理;要么,首先生成语法树或该结构的某种表示,再进行语义处理。2语义处理分两步:1.静态语义分析,即验证语法结构合法的程序是否真正有意义。2.若静态语义正确,语义处理则要执行真正的翻译。即要么生成程序的一种中间表示形式(中间代码),要么生成实际的目标代码。静态语义检查包括:(1)类型检查;(2)控制流检查;(3)一致

2、性检查;(4)相关名字检查。第七章 语义分析和中间代码产生3中间代码:即中间语言,独立于机器的,复杂性介于源语言和机器语言之间的一种表示形式。采用中间语言的好处:第七章 语义分析和中间代码产生(1)便于进行与机器无关的代码优化工作;(2)使编译程序改变目标机更容易;(3)使编译程序的结构在逻辑上更为简单明确。47.1中间语言7.2说明语句7.3赋值语句的翻译7.4布尔表达式的翻译7.5控制语句的翻译7.6过程调用的处理(略)7.7类型检查(略)第七章 语义分析和中间代码产生5§7.1中间语言中间语言形式:后缀式三地址

3、代码图表示法三元式四元式间接三元式DAG抽象语法树6一、后缀式—逆波兰式:规则:§7.1中间语言(1)E-常量/变量:后缀式为E本身(2)E-E1opE2:E1’E2’op(3)E-(E1):(E1’)(4)E-opE1:E1’op7§7.1中间语言例子:a*(b+c)—(a+b)*(c+d)—abc+*x+y≤z∨a>0∧(8+z)>3—ab+cd+*xy+z≤a0>8z+3>∧∨8二、图表示法1.DAG(无循环有向图)与抽象语法树对比相同点:对表达式中的每个子表达式,它们都有一个结点,一个内部结点代表一个操作符,

4、它的孩子代表操作数;不同点:在一个DAG中代表公共子表达式的结点具有多个父结点,而在一棵抽象语法树中公共子表达式被表示为重复的子树。§7.1中间语言9例子:如图所示,为a+a*(b-c)+(b-c)*d的DAG++**da-bc§7.1中间语言102.抽象语法树例子:(1)a:=b*-c+b*-c的图表示法assigna+**buminusbuminuscc语法树assigna+*buminuscDAG§7.1中间语言11(2)a:=b*-c+b*-c的抽象语法树的两种表示法assignida+*idbuminusi

5、dc*uminusidcidbidbIdcuminus1*02idbidcuminus5*46+37idaassign98012345678910§7.1中间语言12三、三地址代码1.三地址代码:下面一般形式的语句构成的序列:x:=yopzT1:=y*z,T2:=x+T1称为三地址代码的原因:每条语句通常包含三个地址,两个用来表示操作数,一个用来存放结果。§7.1中间语言具体实现:用记录表示,其中包含运算符和操作数的域。x,y,z:名字,常数,编译时产生的临时变量op:运算符号(如定点运算符,浮点运算符,逻辑运算符

6、等)132.四元式:带有四个域的记录结构内容均是指针,指向有关名字的符号表入口§7.1中间语言(op,arg1,arg2,result)14§7.1中间语言例子:三地址语句a:=b*-c+b*-c的四元式表示四元式表示Oparg1arg2result(0)(1)(2)(3)(4)(5)uminus*uminus*+:=cbcbT1T2T1T3T4T1T2T3T4T5a153.三元式:为了避免把临时变量填入符号表,可通过计算该临时变量值的语句的位置来引用该临时变量。或是指向符号表的指针—对程序中的名字而言或是指向三元式

7、表的指针—对临时变量而言§7.1中间语言(op,arg1,arg2)16oparg1arg2(0)(1)(2)(3)(4)(5)uminus*umins*+assigncbcb(1)a(0)(2)(3)(4)§7.1中间语言例子:三地址语句a:=b*-c+b*-c的三元式表示174.间接三元式:便于代码优化处理方法:间接码表+三元式表按运算的先后顺序列出有关三元式在三元表中的位置oparg1arg2(1)(2)(3)(4)(5)+*:=↑:=A(1)XDYBC(2)(1)(1)例:语句X:=(A+B)*C;Y:=D↑

8、(A+B)的间接三元式表示如下所示:间接代码(1)(2)(3)(1)(4)(5)三元式表§7.1中间语言18§7.2说明语句编译过程中,对“说明语句”要做的工作:对一个过程或分程序的一系列说明语句,考察时:(1)需要为局部于该过程的名字分配存储空间;(2)对每个局部名字,都需在符号表中建立相应的表项,并填入有关的信息如类型、在存储器中的相对地址

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。