[工学]chapter8new.ppt

  1. 1、本文档共67页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
[工学]chapter8new

产生式 L→L;S 改写为: L→L1; M S M→? 翻译方案: 引入L的属性L.nextlist 1. L→L1; M S { backpatch(L1.nextlist, M.quad); L.nextlist:=S.nextlist } 2. M→? { M.quad:=nextstat} 其它几个语句的翻译 1. S→begin L end { S.nextlist:=L.nextlist } 2. S→A { S.nextlist:=0 } 3. L→S { L.nextlist:=S.nextlist } 翻译语句 while (ab) do if (cd) then x:=y+z; E→id1 relop id2 { E.true:=nextstat; E.false:=nextstat+1 emit(‘if’ id 1.place ‘rop’ id 2.place ‘goto’ -); emit(‘goto’-) } A→id:=E { p:=lookup(id.name); if p?nil then emit(p ‘:=’ E.place) else error } E→E1+E2 { E.place:=newtemp; emit(E.place ‘:=’ E1.place ‘+’ E2.place)} S→if E then M S1 { backpatch(E.true, M.quad); S.nextlist:=merge(E.false, S1.nextlist) } M→? { M.quad:=nextstat } S→A { S.nextlist:=0 } 100: if ab goto – 101:goto – 102: if cd goto – 103: goto – 104: t=y+z 105: x:=t 100: if ab goto – 101:goto – 102: if cd goto 104 103: goto – 104: t=y+z 105: x:=t 翻译语句 while (ab) do if (cd) then x:=y+z; 100 if ab goto 102 (2) 101 goto 107 102 if cd goto 104 103 goto 100 (1) 104 t:=y+z 105 x:=t 106 goto 100 (4) 107 S→while M1 E do M2 S1 { backpatch(S1.nextlist, M1.quad); backpatch(E.true, M2.quad); S.nextlist:=E.false emit(‘goto’ M1.quad) } M→? { M.quad:=nextstat } * * 8.6 说明语句的翻译 相对地址举例 名字 相对地址 x 0 i 64 j 68 X[1] X[2] …… X[8] i j 0 8 56 64 68 begin real x[8]; integer i, j; …… end 8.6 说明语句的翻译 简单的说明语句的翻译(仅登记名字和类型) D→integer namelist | real namelist namelist→namelist, id | id 存在问题:对于形如real a,b,c形式的句子,只能在把所有的名字都归约成namelist后才能就D→integernamelist或D → realnamelist进行归约,这时才能知道每个名字的类型,但实际上这时所有的名字都已经被归约掉了,怎样才能保证扫描到某个名字时能登记属性呢? 8.6 说明语句的翻译 用自下而上翻译,文法改写: D→D1, id | integer id | real id 语句real a,b,c的归约顺序为 D D D 语义规则中只能使用本产生式中文法符号的属性 8.6 说明语句的翻译 (1)D→integer id {enter(id, int);

文档评论(0)

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

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

1亿VIP精品文档

相关文档