编译原理与技术讲义.pptVIP

  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文档。上传文档
查看更多
《编译原理与技术》讲义 编译原理与技术 中间代码生成 中间代码生成 -布尔表达式翻译 -控制流语句翻译 布尔表达式的翻译 布尔表达式文法G4 E?E1 or E2 | E1 and E2 | not E1 | ( E1 ) | id1 relop id2 | true | false | id3 布尔运算符 or 、and 和 not(优先级、结合性) 关系运算符 relop:<、≤、=、≠、>和≥ 布尔常量:true和false 布尔变量:id3 布尔表达式的翻译 两种翻译方法 - 数值表示法(完全计算) 类似算术表达式的翻译,如布尔表达式 true and false or ( 2 1 )的计算为 ?false or ( 21 )?false or true?true - 短路计算法(不完全计算或解释法) A or B ? if A then true else B A and B ? if A then B else false not A ? if A then false else true 借助控制流语句的思路,部分(不完全地-用转移语句)“计算”布尔表达式的值以确定整个表达式的真、假。 布尔表达式的翻译 数值表示法 用1表示true,0代表false。 (1)E?E1 or E2 { t := newtemp; emit( t “:=” E1.place “or” E2.place); E.place := t } (2)E?E1 and E2 (3)E?not E1 (4)E?( E1 ) 布尔表达式的翻译 数值表示法 (5)E? id1 relop id2 { t:= newtemp; emit( “if” id1.place relop.op id2 .place goto nextcode+3 ); emit( t “:=” 0 ); emit( “goto” nextcode+2); emit( t “:=” 1 ); E.place := t; } nextcode : emit产生三地址语句的编号;产生后,nextcode++ id1 relop id2 (关系表达式) 布尔表达式的翻译 数值表示法 (6) E? true { t := newtemp; emit( t “:=” 1 ); E.place := t } (7) E? false { t := newtemp; emit( t “:=” 0 ); E.place := t } (8) E? id3 { t := newtemp; emit( if id.place “goto” nexcode+3); emit( t “:=” 0 ); emit( “goto” nextcode+2); emit( t “:=” 1); E.place := t } id(布尔变量) e.g.16 ab or c=d and not ef 的三地址码: (100) if ab goto 103 (101) t1 := 0 (102) goto 104 (103) t1 := 1 //以上为ab的翻译 (104) if c=d goto 107 (105) t2 := 0 (106) goto 108 (107) t2 := 1 //以上为c=d的翻译 e.g.16 ab or c=d and not ef 的三地址码: (108) if ef goto 111 (109) t3 := 0 (110) goto 112 (111) t3 := 1 //以上为ef的翻译 (112) t4 := not t3 //以上为 not ef 的翻译 (113) t5 := t2 and t4 //以上为 c=d and not ef 的翻译 (115) t6 := t1 or t5 //以上为 ab or c=d and not ef 的翻译 布尔表达式的翻译-短路计算 ab or c=d and not ef 布尔表达式的翻译 短路计算 e.g.17 ab or c=d and not ef的短路计算三地址码: if ab goto L_true goto L1 L1: if c=d goto L2 goto L_false L2: if ef goto L_false goto L_true 短路计算 短路计算 短路计算 回填技术 -布尔表达式短路计算翻译中,产生了

文档评论(0)

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

本账号下所有文档分享可拿50%收益 欢迎分享

1亿VIP精品文档

相关文档