编译原理与技术 中间代码生成1.ppt
《编译原理与技术 中间代码生成1.ppt》由会员分享,可在线阅读,更多相关《编译原理与技术 中间代码生成1.ppt(43页珍藏版)》请在三一文库上搜索。
1、2019/10/28,编译原理与技术讲义,1,编译原理与技术,中间代码生成,2019/10/28,编译原理与技术讲义,2,中间代码生成,布尔表达式翻译 控制流语句翻译,2019/10/28,编译原理与技术讲义,3,布尔表达式的翻译,布尔表达式文法G4 EE1 or E2 | E1 and E2 | not E1 | ( E1 ) | id1 relop id2 | true | false | id3 布尔运算符 or 、and 和 not(优先级、结合性) 关系运算符 relop:、和 布尔常量:true和false 布尔变量:id3,2019/10/28,编译原理与技术讲义,4,布尔表达式
2、的翻译,两种翻译方法 数值表示法(完全计算) 类似算术表达式的翻译,如布尔表达式 true and false or ( 2 1 )的计算为 false or ( 21 )false or truetrue 短路计算法(不完全计算或解释法) A or B if A then true else B A and B if A then B else false not A if A then false else true 借助控制流语句的思路,部分(不完全地用转移语句)“计算”布尔表达式的值以确定整个表达式的真、假。,2019/10/28,编译原理与技术讲义,5,布尔表达式的翻译,数值表示法
3、用1表示true,0代表false。 (1)EE1 or E2 t := newtemp; emit( t “:=” E1.place “or” E2.place); E.place := t (2)EE1 and E2 (3)Enot E1 (4)E( E1 ),2019/10/28,编译原理与技术讲义,6,布尔表达式的翻译,数值表示法 (5)E id1 relop id2 t:= newtemp; emit( “if” id1.place relop.op id2 .place goto nextcode+3 ); emit( t “:=” 0 ); emit( “goto” nextco
4、de2); emit( t “:=” 1 ); E.place := t; nextcode : emit产生三地址语句的编号;产生后,nextcode+,2019/10/28,编译原理与技术讲义,7,id1 relop id2 (关系表达式),if id1 relop id2 goto i+3,i :,t := 0,i+1:,goto i+4,i+2:,t := 1,i+3:,i+4:,true,false,2019/10/28,编译原理与技术讲义,8,布尔表达式的翻译,数值表示法 (6) E true t := newtemp; emit( t “:=” 1 ); E.place := t
5、 (7) E false t := newtemp; emit( t “:=” 0 ); E.place := t (8) E id3 t := newtemp; emit( if id.place “goto” nexcode+3); emit( t “:=” 0 ); emit( “goto” nextcode+2); emit( t “:=” 1); E.place := t ,2019/10/28,编译原理与技术讲义,9,id(布尔变量),if id goto i+3,i :,t := 0,i+1:,goto i+4,i+2:,t := 1,i+3:,i+4:,true,false,2
6、019/10/28,编译原理与技术讲义,10,e.g.16 af 的三地址码: (100) if ab goto 103 (101) t1 := 0 (102) goto 104 (103) t1 := 1 /以上为ab的翻译 (104) if c=d goto 107 (105) t2 := 0 (106) goto 108 (107) t2 := 1 /以上为c=d的翻译,2019/10/28,编译原理与技术讲义,11,e.g.16 af 的三地址码: (108) if ef goto 111 (109) t3 := 0 (110) goto 112 (111) t3 := 1 /以上为e
7、f的翻译 (112) t4 := not t3 /以上为 not ef 的翻译 (113) t5 := t2 and t4 /以上为 c=d and not ef 的翻译 (115) t6 := t1 or t5 /以上为 af 的翻译,2019/10/28,编译原理与技术讲义,12,af,布尔表达式的翻译短路计算,true,L_true,false,true,false,L_false,false,true,L_true-真出口:整个布尔表达式为真时,控制流应转移到的目标语句(代码);反之为假时则转到 L_false-假出口。,表示转移到的目标语句在有关布尔表达式翻译时尚未确定。,2019/
8、10/28,编译原理与技术讲义,13,布尔表达式的翻译,短路计算 e.g.17 af的短路计算三地址码: if af goto L_false goto L_true,2019/10/28,编译原理与技术讲义,14,短路计算,E1 or M E2,true,false,真出口,假出口,E1 and M E2,false,true,假出口,真出口,false,true,not E1,false,真出口,假出口,true,( E1 ),假出口,false,真出口,true,2019/10/28,编译原理与技术讲义,15,短路计算,id1 relop id2,true,真出口,假出口,false,t
9、rue,true,真出口,false,false,假出口,goto ,goto ,2019/10/28,编译原理与技术讲义,16,短路计算,回填技术 布尔表达式短路计算翻译中,产生了转移目标不明确的条件或无条件代码; 当有关目标地址确定后,可将这些目标地址填回到有关代码中。 将有相同转移目标的转移代码的编号串起来形成链;可以方便回填目标地址。,2019/10/28,编译原理与技术讲义,17,回填技术 相关符号属性及语义函数: E.truelist :布尔表达式代码中所有转向真出口的代码语句链; E.falselist :所有转向假出口的代码语句链; backpatch( code-list,
10、target-code ) /将目标地址target-code填回code-list中每条语句 merge( code-list1, code-list2 ) /合并链code-list1和code-list2(它们包含的语句转移目标相同) makelist( code-No ) , makelist()建立含语句编号为code-No的链或空链 M M.code := nextcode / 获取下一三地址代码(语句)的编号(作为转移目标来回填),2019/10/28,编译原理与技术讲义,18,短路计算及回填的翻译方案,(1) EE1 or M E2 backpatch( E1.falselis
11、t, M.code); E.truelist := merge( E1.truelist,E2.truelist); E.falselist := E2.falselist; (2) EE1 and M E2 backpatch( E1.truelist, M.code); E.falselist := merge( E1.falselist,E2.falselist); E.truelist := E2.truelist; ,2019/10/28,编译原理与技术讲义,19,(3) Enot E1 E.truelist := E1.falselist; E.falselist := E1.tr
12、uelist; (4) E( E1 ) E.truelist := E1.truelist; E.falselist := E1.falselist; (5) E id1 relop id2 E.truelist:=makelist(nextcode); emit( “if” id1.place relop.op id2.place “goto” ); E.falselist := makelist( nextcode ); emit( “goto” ); ,2019/10/28,编译原理与技术讲义,20,(6) E true E.truelist := makelist( nextcode
13、); emit( “goto” ); E.falselist := makelist(); (7) E false E.falselist := makelist( nextcode ); emit( “goto” ); E.truelist := makelist(); ,2019/10/28,编译原理与技术讲义,21,控制流语句的翻译,描述控制流语句的文法G5: (1) S if E then S1 (2) S if E then S1 else S2 (3) S while E do S1 (4) S for id := E1 to E2 do S1 (5) S begin L end
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 编译原理与技术 中间代码生成1 编译 原理 技术 中间 代码 生成
链接地址:https://www.31doc.com/p-4223183.html