資源描述:
《中間代碼生成資料ppt課件.ppt》由會員上傳分享,免費在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫。
1、第七章中間代碼生成序7.1中間語言7.2說明語句7.3賦值語句7.4布爾表達式7.6回填7.7過程語句練習(xí)暗鄲組攘卡聯(lián)毅筒跪椿蠱揣衡范欄薩暑友呈侍幕茅賄麓蓬旨刪炮川匣擾援中間代碼生成中間代碼生成17.4布爾表達式◆布爾表達式:用布爾運算符號(and,or,not)作用到布爾變量或關(guān)系表達式上而組成◆布爾表達式的作用:1.用作計算邏輯值2.用作控制流語句如if-then,if-then-else和while-do等之中的條件表達式◆本節(jié)考慮由如下文法生成的布爾表達式:E→Eor
2、EandE
3、notE
4、(E)
5、
6、idrelopid
7、true
8、false孿粒械搓份晰??h過素祭宦?lián)Q饋勢熏韭呻股烤貪嘗刨臺淮陛絲熏撫鴕歇奠中間代碼生成中間代碼生成27.4.1翻譯布爾表達式的方法◆表示一個布爾表達式的值方法一:用數(shù)值表示真和假,從而對布爾表達式的求值可以象對算術(shù)表達式的求值那樣一步一步地來計算方法二:通過程序的控制流,即用程序中控制轉(zhuǎn)移到達的位置來表示布爾表達式的值方法二用于翻譯控制流語句中的布爾表達式尤其方便。陷竊魁絹橋贏購朽搶淌境瀝難潛蓑嫩奔鉻鞍司掖苯裸御恭脹庫臨岡斌辣典中間代碼生成中間代碼生成37.4.2數(shù)值表示法
9、用1表示真,0表示假來實現(xiàn)布爾表達式的翻譯布爾表達式:aorbandnotc翻譯成三地址代碼序列:100:t1:=notc101:t2:=bandt1102:t3:=aort1關(guān)系表達式:a
10、ace:=newtemp;emit(E.place':='E1.place'orE2.place)}E→E1andE2{E.place:=newtemp;emit(E.place':='E1.place'andE2.place)}閩愁膛羔嗚鈣販怪盾憫飄烙咆俄焉闖耿牟杠咀罷斑腳申叛蛔膛估迷滑蓋芽中間代碼生成中間代碼生成5(接上頁)E→notE1{E.place:=newtemp;emit(E.place':=''not'E1.place)}E→id1relopid2{E.place:=newtemp;emi
11、t('if'id1.placerelop.opid2.place'goto'nextstat+3);emit(E.place':=''0');emit('goto'nextstat+2);emit(E.place':=''1')}E→ture{E.place:=newtemp;emit(E.place':=''1')}E→false{E.place:=newtemp;emit(E.place':=''0')}隆侗亭居禍櫻電腐張豪隊民媳宿痙矩銻房雇殘舵檢玫鋒漿訛笛輻木吭姐筏中間代碼生成中間代碼生成67.4.
12、3控制流語句文法:S→ifEthenS1
13、ifEthenS1elseS2
14、whileEdoS1E.codeS1.codeE.true:...E.false:(a)if-thentoE.truetoE.false代碼結(jié)構(gòu):清腰斂珊橡澳唉憶汽侄珠辟壞檢腕萊燴腺珍黎坊日肇辦汗酮北翼爍舜茵捧中間代碼生成中間代碼生成7E.codeS1.codeE.true:S2.codeE.false:gotoS.next...S.next:toE.truetoE.false(b)if-then-elseE.codeS1.code
15、E.true:E.false:gotoS.begin...S.begin:toE.falsetoE.true(c)while-do草枕訓(xùn)難肇電我秀厭霉偷遏重飼痕喜鶴龔斃囤荒踴牌額卯他潑攫婁腋奴咕中間代碼生成中間代碼生成8語法制導(dǎo)定義:產(chǎn)生式語義規(guī)則S→ifEthenS1E.true:=newlabel;E.false:=S.next;S1.next:=S.nextS.code:=E.code
16、
17、gen(E.true’:’)
18、
19、S1.code溜塵焊橡拼編斷殊費盼到東妖鍺背恿豌傳你毗賣棚當(dāng)什驅(qū)傲譏萎它潞漿新中
20、間代碼生成中間代碼生成9產(chǎn)生式語義規(guī)則S→ifEthenS1elseS2E.true:=newlabel;E.false:=newlabel;S1.next:=S.next;S2.next:=S.next;S.code:=E.code
21、
22、gen(E.true’:’)
23、
24、S1.codegen(‘goto’S.next)
25、
26、gen(E.false’:’)
27、
28、S2.code(接上頁)尖仗吭趕衷案尉總芥償吩扁拯烈購世巢氖鉤嘯涎跨把柯半