语义与中间代码生成解析.ppt

  1. 1、本文档共39页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
布尔表达式的翻译 逻辑计值 E→E(1) or E(2) {E.place=newtemp(); emit(E.place ’=’ E(1).place ’or’ E(2).place)} E→E(1) and E(2) {E.place=newtemp(); emit(E.place ’=’ E(1).place ’and’ E(2).place)} E→not E(1) {E.place=newtemp(); emit(E.place ’=’ ‘not’ E(1).place) E→(E(1)) {E.place=E(1).place} E→i(1) relop i(2) {E.place=newtemp(); emit(if i(1) relop.op i(2) goto nextquad+3); emit(E.place ’=’ 0); emit(goto nextquad+2); emit(E.place ’=’ 1)} E→i {E.place=i.place} 布尔表达式的翻译 作为控制条件 E→i {E.truelist = nextquad; E.falselist = nextquad+1; E.bcode = nextquad; emit(if i.place goto 0); emit(goto 0)} E→i(1) relop i(2) {E.truelist = nextquad; E.falselist = nextquad+1; E.bcode = nextquad; emit(if i(1).place relop.op i(2).place goto 0); emit(goto 0)} E→(E(1)) {E.truelist = E(1).truelist; E.falselist = E(1).falselist; E.bcode = E(1).bcode} 布尔表达式的翻译 作为控制条件 E→not E(1) {E.truelist = E(1).falselist; E. falselist = E(1).truelist; E.bcode = E(1).bcode} E→E(1) or E(2) {backpatch(E(1).falselist, E(2).bcode); E.truelist = merge(E(1).truelist, E(2).truelist); E.falselist = E(2).falselist; E.bcode = E(1).bcode} E→E(1) and E(2) {backpatch(E(1).truelist, E(2).bcode); E.truelist = E(2).truelist; E.falselist = merge(E(1).falselist, E(2).falselist); E.bcode = E(1).bcode} 条件语句的翻译 C→if E then {backpatch(E.truelist, nextquad); C.chain = E.falselist} S→C S(1) {S.chain = merge(C.chain, S(1).chain)} TP→C S(1) else {q = nextquad;

文档评论(0)

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

我是自由职业者,从事文档的创作工作。

1亿VIP精品文档

相关文档