编译原理 第八章 语法制导翻译与中间代码生成.pptVIP

编译原理 第八章 语法制导翻译与中间代码生成.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
编译原理 第八章 语法制导翻译与中间代码生成

8.4 简单表达式及赋值语句的语法制导翻译 一、只含整型变量的简单赋值句的文法: A?i:=E E?E+E | E*E | -E | (E) | i 语义变量和语义过程: NEWTEMP:每次调用时,回送一个代表新临时变量名的整数码,临时变量名产生顺序可想象为T1,T2,…。 E.PLACE:表示存放E值的变量名在符号表的入口或整数码 。 GEN(OP, ARG1, ARG2, RESULT):将四元式填进表中。 ENTRY(i):查找并取得与i相对应的标识符在符号表中的 入口 产生式 语义动作 (1) A?i:=E {GEN(:= ,E.PLACE , — , ENTRY(i))} (2) E?E(1)+E(2) {E.PLACE:=NEWTEMP; GEN (+ , E(1).PLACE , E(2).PLACE , E.PLACE) } (3) E?E(1)*E(2) {E.PLACE:=NEWTEMP; GEN (* , E(1).PLACE , E(2).PLACE , E.PLACE) } (4) E?-E(1) {E.PLACE:=NEWTEMP; GEN (@ , E(1).PLACE , — , E.PLACE) } (5) E?(E(1)) {E.PLACE:=E(1).PLACE} (6) E?i {E.PLACE:=ENTRY(i)} 在进行不同类型量混合运算时,须为非终结符增加类型属性E.MODE。如在产生式E?E(1) op E(2)中,E.MODE的语义规则定义为: {if (E(1).MODE==IntE(2) .MODE==Int) E.MODE=Int else E.MODE=r; } 需增加四元式:(itr , A ,—, T),并在运算符上指出相应的类型。 如X=Y + I * J(X、Y为实型,I、J为整型)的四元式序列为: (*i , I , J , T1) (itr , T1,—, T2) (+r , Y , T2 , T3) (= , T3 ,—, X) 二、控制语句中的布尔表达式的翻译 布尔表达式在程序设计语言中有两个基本功用,一是作为控制语句的条件式;二是作为逻辑运算,获得逻辑值。 后者的翻译较为简单,下面只考虑作为控制语句中的条件式 在高级程序设计语言中,布尔表达式一般的处理方式是采用某种优化措施简化计算过程。 考虑下述文法的布尔表达式: E?E∧E | E∨E | ┒E | (E) | i | i rop i 我们可以用条件句来解释布尔计算: A∨B解释为 if A then true else B A∧B解释为 if A then B else false ┒A解释为 if A then false else true 1 a=2, b=3 1||a=2b=3 1 a=0, b=0 a=b=0 为按此方式翻译布尔式,引入如下三种形式的四元式: (1) (jnz ,A1 ,— , p),若A1为‘真’,则转向第p个四元式。 (2) (jθ, A1 ,A2 , p),若A1θA2为‘真’,则转向第p个四元式。 (3) (j , —, — , p),无条件转向第p个四元式。 这样,ab等价于if ab then 1 else 0,可翻译为: (1) if ab goto (4) (2) t:=0 (3) goto (5) (4) t:=1 (5)… 其中用临时变量t存放布尔表达式ab的值。 if A1≠0 goto p if A1 θ A2 goto p goto p 对ab cd,得下列序列: (1) (j,a,b,3) (2) (j,-,-,5) (3) (j,c,d,7) (4) (j,-,-,5) (5) (:=,0,-,t1) (6) (j,-,-,8) (7) (:=,1,-,t1) (8) 作为条件控制的布尔式,比如if E then S1 else S2中的E,它的作用仅仅在于控制对S1和S2的选择,因此只涉及到E的两个出口而不需要保留E的值。如图8-7所示。 例如, if A∨BD then S1 else S2 可解释为:若A为‘真’,则执行S1,否则若BD为‘

文档评论(0)

119220 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档