编译原理PPT课件第五章中间代码生成.ppt
《编译原理PPT课件第五章中间代码生成.ppt》由会员分享,可在线阅读,更多相关《编译原理PPT课件第五章中间代码生成.ppt(37页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、1 翻译方式有两种翻译方式有两种:第五章第五章 中间代码生成中间代码生成源语言源语言目标语言目标语言源语言源语言1)2)目标语言目标语言中间代码中间代码中间代码的特点中间代码的特点:结构简单结构简单,功能明确功能明确,易于优化易于优化,易于翻译易于翻译.2第一节第一节 中间代码简介中间代码简介1)逆波兰表示法逆波兰表示法 运算量在前运算量在前,运算符在后的后缀式表示法运算符在后的后缀式表示法.例如例如:表达式表达式后缀式后缀式 a+bab+(a+b)*cab+c*a*(b+c)abc+*(a+b)*(c+d)ab+cd+*32)三元式表示法三元式表示法 三元式就是三元组三元式就是三元组:(操作
2、符操作符,操作数操作数1,操作数操作数2)例如例如:语句语句 D:=A+B*C 可翻译为下述三元式表可翻译为下述三元式表:(1)(*,B,C)(2)(+,A,(1)(3)(:=,D,(2)三元式没有明确指出结果放在何处三元式没有明确指出结果放在何处.43)四元式表示法四元式表示法 四元式就是四元组四元式就是四元组:(操作符操作符,操作数操作数1,操作数操作数2,结果结果)例如例如:语句语句 D:=A+B*C 可翻译为下述四元式表可翻译为下述四元式表:(1)(*,B ,C ,T1)(2)(+,A ,T1,T2)(3)(:=,T2,D)四元式间通过临时变量传值四元式间通过临时变量传值.操作符实现的
3、运算也非常简单操作符实现的运算也非常简单,本章主要介绍各种语句到四元式的翻译本章主要介绍各种语句到四元式的翻译.5第二节第二节 语法制导翻译的基本思想语法制导翻译的基本思想1 何谓语法制导翻译何谓语法制导翻译 在语法分析的每次归约或推导时在语法分析的每次归约或推导时,根据产生式的语义进行根据产生式的语义进行翻译的一种方法翻译的一种方法.翻译时翻译时,除了产生中间代码外除了产生中间代码外,还有许多辅助工作还有许多辅助工作,包括包括:改变语法变量的值改变语法变量的值;查填符号表查填符号表;诊查与报告源程序错误等诊查与报告源程序错误等.2 与翻译相关的若干约定与翻译相关的若干约定 1)临时变量临时变
4、量 在翻译中在翻译中,可能会引入许多临时变量存放中间结果可能会引入许多临时变量存放中间结果.通过调用通过调用 newtemp()返回一个临时变量返回一个临时变量 Ti .62)分析栈分析栈 分析栈中的内容为语法单位分析栈中的内容为语法单位,每个语法单位包含两个部分每个语法单位包含两个部分:(语法单位名称语法单位名称,语法单位属性语法单位属性),属性可能有多个值属性可能有多个值.例如例如:E 为表达式的语法单位为表达式的语法单位,E.place 代表了该表达式值代表了该表达式值 存放的地方存放的地方.3)符号表符号表 符号表用于存放变量及属性值符号表用于存放变量及属性值,由如干项构成由如干项构成
5、,每个项为每个项为:(变量名变量名,变量信息变量信息).4)四元式表四元式表 四元式表用于存放翻译中产生的四元四元式表用于存放翻译中产生的四元 式式,通过过程通过过程 Gen(操作符操作符,操作数操作数1,操作数操作数2,结果结果)把四元式存入四元式表的把四元式存入四元式表的 NXQ 所指所指 空间中空间中,NXQ 自动加自动加 1.四元式表四元式表NXQ75 一些基本操作一些基本操作 newtemp()产生一临时变量产生一临时变量;gen(操作符操作符,操作数操作数1,操作数操作数2,结果结果)填入四元式表填入四元式表;fill(i,属性属性)填入符号表填入符号表;entry(i)查符号表查
6、符号表,返回返回 i 在符号表中的位置在符号表中的位置;backpatch(m,n)把把 n 填入填入 四元式表第四元式表第 m 个四元式中个四元式中;8第三节第三节 简单变量说明语句的翻译简单变量说明语句的翻译 程序设计中程序设计中,首先应该对程序中使用的变量进行说明首先应该对程序中使用的变量进行说明.其目的其目的是规定变量所占用空间的大小是规定变量所占用空间的大小.编译时编译时,对变量说明语句的翻译工对变量说明语句的翻译工作作,本质上就是把变量名及属性登记在符号表中本质上就是把变量名及属性登记在符号表中,以便后续工作中以便后续工作中使用使用.pascal 语言的简单变量说明语句为语言的简单
7、变量说明语句为:x,y,z:real;语法可表示为语法可表示为:D NAMELIST:T NAMELIST NAMELIST,i|i T integer|real|boolean|char 该文法代表了所有该文法代表了所有非结构型变量的说明语非结构型变量的说明语句句.9 当然当然,也可以用如下文法表示也可以用如下文法表示:Di:T|i,D T integer|real|boolean|char 我们已经知道用该文法如何分析一个说明语句我们已经知道用该文法如何分析一个说明语句,下面要解决下面要解决的是的是,怎样在分析的过程中怎样在分析的过程中,把该语句表达的意思完整的翻译清楚把该语句表达的意思完
8、整的翻译清楚.说明语句的含义是说明语句的含义是:说明的变量具有给定类型说明的变量具有给定类型;编译时则翻译为编译时则翻译为:把每个变量及类型登记在符号表中把每个变量及类型登记在符号表中.语法制导翻译就是为每一条产生式配一个子程序语法制导翻译就是为每一条产生式配一个子程序,当用某个当用某个产生式归约时产生式归约时,就调用相应的子程序进行适当的翻译工作就调用相应的子程序进行适当的翻译工作.这些子程序称为语法单位的这些子程序称为语法单位的语义子程序语义子程序(或语义动作或语义动作).10 下面讨论如下文法的各产生式的语义子程序及翻译过程下面讨论如下文法的各产生式的语义子程序及翻译过程 Di:T|i,
9、D T integer|real|boolean|char 1)T integer T.att:=integer;2)T real T.att:=real;3)T boolean T.att:=boolean;4)T char T.att:=char;5)Di:T D.att:=T.att ;fill(i,T.att);6)Di:D D.att:=D.att ;fill(i,D.att);11示例示例:x,y,z:real;x,y,z:realx,y,z:Tx,y,Dx,DDT.att=realD.att=real;fill(z,real)D.att=real;fill(y,real)D.at
10、t=real;fill(z,real)最终最终,符号表中包含了符号表中包含了 x,y,z 三个变量及属性三个变量及属性 real.12第四节第四节 简单算术表达式简单算术表达式 和赋值语句的翻译和赋值语句的翻译 简单算术赋值语句的文法可表示为简单算术赋值语句的文法可表示为:Si:=EEE+E|E-E|E*E|E/E|(E)|i 该文法为二义文法该文法为二义文法,但如果规定每个终结符的优先关系但如果规定每个终结符的优先关系,并按并按优先关系进行归约优先关系进行归约,则可以避免二义性则可以避免二义性.赋值语句的含义是赋值语句的含义是:计算出计算出 E 的值的值,并写入变量并写入变量 i 中中.编译
11、中编译中,并不关心值是多少并不关心值是多少,而关心的是怎样计算值的过程而关心的是怎样计算值的过程;也即也即,哪些变量参加运算哪些变量参加运算,怎样运算怎样运算?上面文法的各产生式语义子程序如下上面文法的各产生式语义子程序如下:13Ei E.place:=entry(i)/E.place 表示了表达式表示了表达式E 的值放在什么变量中的值放在什么变量中 E(E1)E.place:=E1.placeE E1+E2 E.place:=newtemp()Gen(+,E1.place,E2.place,E.place)E E1-E2 E.place:=newtemp()Gen(-,E1.place,E2
12、.place,E.place)E E1*E2 E.place:=newtemp()Gen(*,E1.place,E2.place,E.place)E E1/E2 E.place:=newtemp()Gen(/,E1.place,E2.place,E.place)S i:=E Gen(:=,E.place,entry(i)四元式中的操作数及结果四元式中的操作数及结果,实质上是一指向变量的指针实质上是一指向变量的指针.14示例示例:x:=y+zx:=y+z x:=y x:=Ex:=E+zx:=E1+E2E.place=entry(y)E1.place=entry(y);E2.place=entry
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 编译 原理 PPT 课件 第五 中间 代码 生成
限制150内