【国防科大-编译原理】11.4习题课(4).pptx

【国防科大-编译原理】11.4习题课(4).pptx

  1. 1、本文档共48页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
1;第七章 语义分析和中间代码产生;布尔表达式的翻译;P218-6. 按7.4.2节的办法,写出布尔式A or (B and not (C or D))的四元式序列。;P218-6. 按7.4.2节的办法,写出布尔式A or (B and not (C or D))的四元式序列。;常用语句的翻译;P218-7. 用7.5.1节的办法,把下面的语句翻译成四元式序列: while A < C and B < D do if A=1 then C:=C+1 else while A ? D do A:=A+2;;P218-7. 用7.5.1节的办法,把下面的语句翻译成四元式序列: while A < C and B < D do if A=1 then C:=C+1 else while A ? D do A:=A+2;;12. Pascal语言中for语句的一般形式为 for v:=initial to final do S 其意义如下: begin t1:=initial; t2:=final; if t1 ? t2 then begin v:=t1; S; while v ? t2 do begin v:=succ(v); S; end end end;;构造翻译模式 ;F→ for id:=E1 to E2 do { INITIAL=NEWTEMP; emit(‘:=,’ E1.PLACE ’, -,’ INITIAL); FINAL=NEWTEMP; emit(‘:=,’ E2.PLACE ’, -,’ FINAL); p:= nextquad+2; emit(‘j?,’ INITIAL ‘,’ FINAL ’,’ p); F.nextlist:=makelist(nextquad); emit(‘j,-,-,-’); F.place:=lookup(id.name); if F.place?nil then emit( ‘:=’, F.place,’-’, INITIAL); F.quad:=nextquad; F.final:=FINAL; } ;S→ F S1 { backpatch(S1.nextlist, nextquad) p:=nextquad+2; emit(‘j?,’ F.place‘,’ F.final ’,’ p ); S.nextlist := merge(F.nextlist, makelist(nextquad)); emit(‘j,-,-,-’); emit(‘succ,’ F.place ’, -, ’ F.place); emit(‘j,-,-,’ F.quad); } ;14;构造翻译模式 ;构造翻译模式 ;F→ for I:=E1 to E2 { F.falselist:= makelist(nextquad); emit(‘j>,’ E1.place ‘,’ E2.place ‘,0’); emit(I.Place ‘:=’E1.place); F.truelist := makelist(nextquad); emit(‘j,-,-,0’); F.place := I.place; F.end := E2.place; } S→ F do M S1 { backpatch(S1.nextlist, nextquad); backpatch(F.truelist, M.quad); emit(F.place ‘:=’F.place ‘+’1); emit(‘j<=,’ F.place ‘,’ F.end ‘,’ M.quad); S.nextlist := F.falselist; };S→ F do M S1 { backpatch(S1.nextlist,nextquad); backpatch(F.truelist,M.quad); emit(F.place ‘:=’F.place ‘+’1); emit(‘j,’F.place ‘,’F.end ‘,’M.quad); S.nextlist := F.falselist; } F→ for I:=E1 to E2 { F.falselist:= makelist(nextquad); emit(‘j>,’E1.place ‘,’E2.place ‘,0’); emit(I.Place ‘:=’E1.place); F.truelist := makelist(nextquad);

文档评论(0)

祝星 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档