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