第11章 语义分析和中间代码生成.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文档。上传文档
查看更多
语义子程序 M → if B then { backpatch(B.T , ip); M.CHAIN := B.F} N → M S1 else { q := ip; emit (goto 0); backpatch(M.CHAIN , ip); N.CHAIN := merg(S1.CHAIN , q)} S → N S2 { S.CHAIN := merg(N.CHAIN , S2.CHAIN)} 例子:if ab then a:=a+b else a:=a-b if ab if BB.T=100100: if ab goto 0B.F=101101: goto 0 if B then Mbackpatch(100,102) M.CHAIN={101} M a:=a+b M S1102: t1=a+bS1.CHAIN={0} 103: a=t1 M S1 else Nq = 104104: goto 0 backpatch(M.CHAIN,105) N.CHAIN=merg(S1.CHAIN,q)={104} N a:=a-b N S2105: t2=a-bS2.CHAIN={0} 106: a=t2 SS.CHAIN=merg(N.CHAIN,S2.CHAIN)={104} 105 102 5. while语句的翻译 文法 S → while B do S1 B的第一条三地址语句地址需记录。 用S1的第一条三地址语句的地址“回填”B.T链。 B S1 ? B为假 B为真S → while B do S1 改写文法: W → while D → W B do S → D S1 B S1 ? B为假 B为真翻译方案 W → while { W.CODE := ip } D → W B do { backpatch (B.T , ip); D.CHAIN := B.F; D.CODE := W.CODE} S → D S1 { backpatch(S1.CHAIN , D.CODE); emit (goto D.CODE); S.CHAIN := D.CHAIN} 6. for语句的翻译 文法 S → for i:=E1 step E2 until E3 do S1 其语义如图所示: S → for i:=E1 step E2 until E3 do S1 改造文法为: F1 → for i:=E1 F2 → F1 step E2 F3 → F2 until E3 S → F3 do S1 翻译方案 (1) F1 → for i:=E1 { P=entry(i.NAME); emit ( P, =, E1.PLACE ); F1.PLACE := P; F1.CHAIN: = ip; emit ( goto 0 ); F1.AGAIN := ip} (2) F2 → F1 step E2 { F2.AGAIN := F1.AGAIN; F2.PLACE := F1.PLACE; emit (F2.PLACE = F2.PLACE + E2.PLACE ,) backpatch ( F1.CHAIN , ip )} (3) F3 → F2 until E3 { F3.AGAIN := F2.AGAIN; F3.CHAIN := ip; emit ( if F2.PLACE E3.PLACE goto 0 ) ;} (4) S → F3 do S1 { emit ( goto F3.AGAIN ); backpatch ( S1.CHAIN , F3.AGAIN ); S.CHAIN := F3.CHAIN;} 习题 1. 对文法G(E): E→E+T│T T→T*F│F F→(E) │i 给出表达式 (5*4+8)*3 的语法树,并注明各结点的语义值VAL。 2. 写出表达式 -(a+b)*(c+d)-(a+b+c) 的翻译过程。 3. 写出赋值语句 A:=B*(-C+D) 的翻译过程。 4. 对下列翻译方案 S → PS { print 1 } S → PQ { print 2 } P → a { print 3 } Q → bR { print 4 } Q → dQ { print 5 } R → c { print 6 } 当输入串为 aaadbc 时,翻译结果是什么? 5. 写出语句 if CD then while AB do x:=y+2*z 的翻译过程。 6. 写出语句 while AC do if A=1 then C:=C+1 else while AD do A:=A+2 的翻

文档评论(0)

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

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

1亿VIP精品文档

相关文档