编译原理课件cha7 中间代码生成.ppt

编译原理课件cha7 中间代码生成.ppt

ID:58665042

大小:1.80 MB

页数:85页

时间:2020-10-05

编译原理课件cha7 中间代码生成.ppt_第1页
编译原理课件cha7 中间代码生成.ppt_第2页
编译原理课件cha7 中间代码生成.ppt_第3页
编译原理课件cha7 中间代码生成.ppt_第4页
编译原理课件cha7 中间代码生成.ppt_第5页
资源描述:

《编译原理课件cha7 中间代码生成.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、第七章语义分析和中间代码生成引言7.1中间语言(重点)7.2说明语句7.3赋值语句的翻译(重点)7.4布尔表达式的翻译(重点)7.5控制语句的翻译(重点难点)7.6过程调用的翻译7.7类型检查(略)作业课程目录7/30/20211语义分析的任务p166静态语义检查动态语义处理——翻译总目标例:类型检查、控制流检查、一致性检查、相关名字检查对程序意义的解释,执行真正的翻译例:变量的存储分配例:表达式的求值例:语句的翻译(中间代码的生成)生成等价的中间代码7/30/20212编译中的语义分析描述方法——属性文法利用属

2、性文法描述如何将各种语句和表达式翻译成中间代码为每个文法符号赋予相应属性,对应每一个产生式编制一个语义子程序工作方式——语法制导翻译当一个产生式获得匹配时,调用相应的语义子程序实现语义检查与翻译每识别出一个语法结构时,完成相应的语义检查与中间代码生成7/30/20213中间语言p166(Intermediatelanguage/code/representation)许多编译程序采用的独立于机器的、复杂性界于源语言和机器语言之间语言源程序的一种内部表示——中间代码序列(中间语言的语句)用中间语言过渡的好处便于进行

3、与机器无关的优化工作使编译程序改变目标机容易,便于移植使编译程序的结构在逻辑上更为简单明确章节目录7/30/202147.1中间语言p167章节目录常见形式后缀式(逆波兰式)图表示法抽象语法树、DAG图三地址代码(抽象描述)四元式、三元式、间接三元式(具体实现)特点形式简单、语义明确、便于翻译独立于目标语言7/30/20215举例中缀式后缀式(1)(a+b)*c(2)-a*(b+c)(3)(a+b)*(c+d)(4)not(AorB)7.1.1后缀式(逆波兰式)p167是表达式的一种表示形式把运算符写在运算量(操

4、作数)后面定义设E是表达式,那么若E是变量或常量,E的后缀式为E自身E1OPE2==>E1’E2’OP,其中E1’和E2’分别为E1和E2的后缀式(E)==>E’ab+c*a@bc+*ab+cd+*ABornot7/30/20216中缀式改写成后缀式课堂练习中缀式1.-a+b*c2.a+b*(c-d)+e/(c-d)↑n乘幂运算3.x:=a-b/(c+d)对应后缀式后缀式特点1.运算量的顺序与中缀式相同2.运算符的先后顺序即为运算的先后顺序3.有利于表达式运算的实现BEGIN1.a@bc*+2.abcd-*+ec

5、d-n↑/+3.xabcd+/-:=7/30/20217中缀式改写成后缀式的属性文法p167产生式语义规则E→E1opE2E.code:=E1.code

6、

7、E2.code

8、

9、opE→(E1)E.code:=E1.codeE→idE.code:=id功能:完成中缀表达式到后缀表达式的翻译例如:id1+id2+id3后缀式:E.codeEE+EE+Eid2id1id3数组postid1id2+id3E1E2+节目录7/30/202187.1.3三地址代码p169一般形式x:=yopz(1)三个地址xyz为变量、常数或

10、编译产生的临时变量(2)每条语句的右边只能有一个运算符op表达式x+y*z的三地址代码(1)T1:=y*z(2)T2:=x+T1赋值语句a:=b*-c+b*-c的三地址代码(1)T1:=-c(2)T2:=b*T1(3)T3:=-c(4)T4:=b*T3(5)T5:=T2+T4(6)a:=T5结果操作数操作数运算符7/30/20219三地址代码种类p170x:=yopzx:=opyx:=ygotoLifxrelopygotoLparamxcallp,nreturnxx:=y[i]x[i]:=yx:=&yx:=*y*

11、x:=y双目运算单目运算赋值无条件转移条件转移实在参数过程调用过程返回数组运算(取数)(存数)地址和指针运算7/30/202110赋值语句生成三地址代码的属性文法定义p171非终结符的综合属性(1)S.code表示赋值语句S的三地址代码(2)E.place表示存放E值的名字(3)E.code表示对E求值的三地址代码序列函数(1)newtemp每次调用将返回一个不同临时变量名字如T1,T2,…(2)gen(x‘:=’y‘+’z)表示生成三地址代码语句x:=y+z赋值语句文法:S→id:=EE→E1+E2E→E1*E

12、2E→-E1E→(E1)E→id7/30/202111将赋值语句翻译为三地址代码的属性文法p171S→id:=EE→E1+E2E→E1*E2E→-E1E→(E1)E→id产生式语义规则S.code:=E.code

13、

14、gen(id.place':='E.place)E.place:=newtemp;E.code:=E1.code

15、

16、E2.code

17、

18、gen(E.place'

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

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

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