8 语法制导翻译和中间代码生成.pptVIP

  1. 1、本文档共22页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第8章 语法制导翻译和中间代码的生成 本章我们将把上一章所介绍的方法和技术应用于语义分析和中间代码的生成中。 紧接在词法分析和语法分析之后,编译程序要做的工作是进行静态语义检查和翻译。静态语义检查通常包括:1。类型检查。2。控制流检查。3。一致性检查。4。相关名字检查。 翻译为中间语言的好处: (1)便于进行与机器无关的代码优化; (2)使编译程序改变目标机更容易; (3)使编译程序的结构在逻辑上更为简单明确,以中间语言为界面,编译前端和后端的接口更清晰。 8.3 中间代码的形式 逆波兰式(后缀式) 三元式 树形表示 四元式 8.3.1 逆波兰式 也叫“后缀表达式”,主要用于表达算术表达式。这种表示方法把运算对象写在前面,把运算符号写在后面。a+b写成ab+ 8.4 简单赋值语句的翻译 8.5 布尔表达式的翻译 求值布尔式的翻译 控制语句中布尔式的翻译 8.5.1 求值布尔式的翻译 例: 布尔表达式ab or cd and ef可以生成如下代码序列(起始点代码序号为100): 100: if(ab) goto 103 107: T2:=1 101: T1:=0 108: if(ef) goto 111 102: goto 104 109: T3:=0 103: T1:=1 110: goto 112 104: if(cd) goto 107 111: T3:=1 105: T2:=0 112: T4:=T2 and T3 106: goto 108 113: T5:=T1 or T4 第二种方法,看为等价语句 if ab or cd and ef then 1 else 0 100: if(ab) goto 106 101: goto 102 102: if(cd) goto 104 103: goto 108 104: if(ef) goto 106 105: goto 108 106: t:=1 107: goto 108 108: t:=0 8.5.2 控制语句中布尔表达式的翻译 三种控制语句: S? if E then S1 | if E then S1 else S2 | while E do S1 对于转移条件E的翻译(E为a rop b的形式): If a rop b goto E.true goto E.false 使用E.true E.false表示E的真假出口转移目标 8.6 控制结构的翻译 If E then S1 else S2 100: if E goto E.true (102) 101: goto E.false (i+2) 102: …… S1 i : i+1: goto END(j+1) i+2: ……. S2 j : j+1: 8.6.3 for循环语句 * 8.3.2 三元式 是以(op , arg1 , arg2)表示一个代码:op表示算符,arg1和arg2分别表示两个操作数。a:=b*c+b*d的三元式表示为: (*, b, c) (*, b, d) (+, (1), (2)) (:= , (3) , a) 三元式包含对中间结果的显示应用,每一个三元式隐含着它的运算结果,是以三元式标号的形式被引用的。 8.3.3 树形表示 实际上是三元式的另一种形式。简单变量或常数的树形有自身单节点表示,二目操作和一目操作则由操作符为根,操作数为它的子节点的树锁构成。 8.3.4 四元式 它的代码由四部分组成: (op , arg1 , arg2,result)。其中op表示算符,arg1表示第一操作数,arg2表示第二操作数,result表示操作结果。如a:=b*c+b*d的四元式表示为: (*, b, c, t1) (*, b, d, t2) (+, t1, t2, t3) (:= , t3 , -, a) 跳转(jump,-,-,L) (jrop,B,C,L) 四元式可以使用简单赋值语句的形式

文档评论(0)

精华文档888 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档