网站大量收购闲置独家精品文档,联系QQ:2885784924

哈工大编译原理6-2.1课件.ppt

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

本节考虑由如下文法生成的布尔表达式: ;优先级:not、and、or And、or左结合 not右结合;方法二用于翻译控制流语句中的布尔表达式尤其方便。;布尔表达式:a or b and not c 翻译成三地址代码序列: 100 : t1:=not c 101 : t2:=b and t1 102 : t3:=a or t1 ;关系表达式:ab ;emit用于将一个三地址语句输送到文件中;E→E1 or E2 {E.place:=newtemp; emit(E.place:=E1.placeor E2.place)} ;E→ture {E.place:=newtemp; ④ emit(E.place:= 1)} ;例:布尔表达式 ab and cd and ef对应的语法树;例:布尔表达式 ab and cd and ef可以生成如下的三地址码;四、 控制流语句中的布尔表达式的翻译;三地址表示: E.true: if a<b goto E.true (真出口) E.false: goto E.false (假出口) ;布尔表达式: E and E E or E、 not E;2、优化代码结构:;;产生式;产生式;If ef goto ltrue Goto Lfalse;4、用四元式表示中间代码;例:ab的四元式真假出口可以表示为: (J, a , b , p) (j , , , q);前面例子产生的三地址码的四元式形式 if ab goto L1 goto Lfalse L1:if cd goto l2 goto Lfalse L2:if ef goto Ltrue goto Lfalse;5、回填 ;对于每一条这样的指令作适当的记录, ;要解决的问题:在一遍扫描中,生成跳转语句时,不知道控制要转向的语句标号; (J,a,b,102) (j, , ,Lfalse) (J,c,d,104) (j, , ,Lfalse) (J,e,f,L.true) (j, , ,Lfalse);布尔表达式文法: (1)E→E1 or M E2 (2) |E1 and M E2 (3) |not E1 (4) |(E1) (5) |id1 relop id2 (6) |true (7) |false (8)M→ε;插入非终结符号M是为了引入一个语义动作,以便在适当的时候获得即将产生的下一个四元式的索引,或说四元式的标号;②.merge(p1,p2):连接由指针p1和p2指向的两个表并且返回一个指向连接后的表的指针。 Merg(p1,p2)=;③.backpatch(p,t):把i作为目标标号回填到p所指向的表中的每一个转移指令中去。此处的“表”都是为“反填”所拉的链.代码如下:;7.使用一遍扫描的布尔表达式的翻译模式;3 E?not E1 { E.truelist:=E1.falselist; E.falselist:=E1.truelist };6 E ?true {E.truelist:= makelist(nextquad); emit(′goto—′); };E;语义动作执行顺序: ⑤⑧⑤②⑧⑤②;最终产生的代码序列为: K (j, a , b , k+2 ) k+1 (j , , , ) K+2 (j, c , d , k+4 ) k+3 (j , , , k+1 ) K+4 (j, e , b , ) k+5 (j , , , k+3 );文法: S→if E then S1 | if E then S1 else S2 | while E do S1 ;E.code;E.code;语法制导定义:;产

文档评论(0)

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

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

1亿VIP精品文档

相关文档