语言中间代码生成程序.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 7.4 布尔表达式和控制流语句 布尔表达式的语法制导翻译 (1)E - E1 or M E2 {Backpatch( E1.falselist, M.quad); E.Truelist = merge(E1.truelist, E2.truelist); E.Falselist = E2.falselist; } 7.4 布尔表达式和控制流语句 (2)E - E1 and M E2 {Backpatch( E1.truelist, M.quad); E.truelist = E2.truelist; E.falselist = merge(E1.falselist, E2.falselist); } 7.4 布尔表达式和控制流语句 (3)E - not E1 {E.truelist = E1.falselist; E.falselist = E1.truelist;} (4)E - (E1) {E.truelist = E1.truelist; E.Falselist = E1.falselist;} 7.4 布尔表达式和控制流语句 (5)E - id1 relop id2 {E.truelist = makelist(nextquad); E.falselist = makelist(nextquad+1); Emit(‘j’ relop.op ‘,’ id1.place ‘,’ id2.place, ‘,’ ‘0’); Emit(‘j, -, -, 0’);} 7.4 布尔表达式和控制流语句 (6)E - id {E.truelist = makelist(nextquad); E.falselist = makelist(nextquad+1); Emit(‘jnz’ ‘,’ id.place ‘,’ ‘-’, ‘,’ ‘0’); Emit(‘j, -, -, 0’);} (7)M-ε {M.quad = nextquad;} 7.4 布尔表达式和控制流语句 布尔表达式的语法制导翻译举例 ab or cd and ef or E.tc=100 E.fc=101 a b E.tc=104 E.fc={103,105} E.tc=102 E.fc=103 ab or cd and ef的注释分析树 M.q=102 ε c d and M.q=104 ε E.tc=104 E.fc=105 e f E.tc={100,104} E.fc={10.,105} 7.4 布尔表达式和控制流语句 布尔表达式的语法制导翻译举例 ab or cd and ef 100 (j, a, b, 0) 101 (j, -, -, 102) 102 (j, c, d, 104) 103 (j, -, -, 0) 104 (j, e, f, 0) 105 (j, -, -, 0) 7.4 布尔表达式和控制流语句 控制语句的语法制导翻译 (1)S - if E then M1 S1 N else M2 S2 {Backpatch( E.truelist, M1.quad); Backpatch( E.falselist, M2.quad); S.Nextlist = merge(S1.nextlist, N.nextlist, S2.nextlist) } 7.4 布尔表达式和控制流语句 (2)N-ε {N.nextlist = makelist(nextquad); Emit(‘j, -, -, -’) } (3)M-ε {M.quad = nextquad; Backpatch(E.truelist, M.quad) } 7.4 布尔表达式和控制流语句 (4)S-if E then M S1 {backpatch(E.truelist, M.quad); S.Nextlist = merge(E.falselist, S1.nextlist); } 7.4 布尔表达式和控制流语句 (5)S-while M1 E do M2

文档评论(0)

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

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

1亿VIP精品文档

相关文档