語(yǔ)義分析與中間代碼生成

語(yǔ)義分析與中間代碼生成

ID:27711390

大?。?.96 MB

頁(yè)數(shù):126頁(yè)

時(shí)間:2018-12-04

語(yǔ)義分析與中間代碼生成_第1頁(yè)
語(yǔ)義分析與中間代碼生成_第2頁(yè)
語(yǔ)義分析與中間代碼生成_第3頁(yè)
語(yǔ)義分析與中間代碼生成_第4頁(yè)
語(yǔ)義分析與中間代碼生成_第5頁(yè)
資源描述:

《語(yǔ)義分析與中間代碼生成》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫(kù)。

1、第7章語(yǔ)義分析與中間代碼生成SchoolofComputerScience&TechnologyHarbinInstituteofTechnology重點(diǎn):三地址碼,各種語(yǔ)句的目標(biāo)代碼結(jié)構(gòu)、語(yǔ)法制導(dǎo)定義與翻譯模式。難點(diǎn):布爾表達(dá)式的翻譯,對(duì)各種語(yǔ)句的目標(biāo)代碼結(jié)構(gòu)、語(yǔ)法制導(dǎo)定義與翻譯模式的理解。2021/9/152第7章語(yǔ)義分析與中間代碼生成7.1中間代碼的形式7.2聲明語(yǔ)句的翻譯7.3賦值語(yǔ)句的翻譯7.4類型檢查7.5控制結(jié)構(gòu)的翻譯7.6回填7.7switch語(yǔ)句的翻譯7.8過(guò)程調(diào)用和返回語(yǔ)句的翻譯7.9輸入輸出語(yǔ)句的翻譯7.10本章小結(jié)2021/9/1537.1中間代碼的形式

2、中間代碼的作用過(guò)渡:經(jīng)過(guò)語(yǔ)義分析被譯成中間代碼序列中間代碼的形式中間語(yǔ)言的語(yǔ)句中間代碼的優(yōu)點(diǎn)形式簡(jiǎn)單、語(yǔ)義明確、獨(dú)立于目標(biāo)語(yǔ)言便于編譯系統(tǒng)的實(shí)現(xiàn)、移植、代碼優(yōu)化常用的中間代碼語(yǔ)法樹(shù)(6.3.5節(jié))逆波蘭表示、三地址碼(三元式和四元式)、DAG圖表示2021/9/1547.1.1逆波蘭表示中綴表達(dá)式的計(jì)算順序不是運(yùn)算符出現(xiàn)的自然順序,而是根據(jù)運(yùn)算符間的優(yōu)先關(guān)系來(lái)確定的,因此,從中綴表達(dá)式直接生成目標(biāo)代碼一般比較麻煩。波蘭邏輯學(xué)家J.Lukasiewicz于1929年提出了后綴表示法,其優(yōu)點(diǎn)為:表達(dá)式的運(yùn)算順序就是運(yùn)算符出現(xiàn)的順序,它不需要使用括號(hào)來(lái)指示運(yùn)算順序。2021/9/15

3、57.1.1逆波蘭表示例7.1下面給出的是一些表達(dá)式的中綴、前綴和后綴表示。中綴表示前綴表示后綴表示a+b+abab+a*(b+c)*a+bcabc+*(a+b)*(c+d)*+ab+cdab+cd+*a:=a*b+c*d:=a+*ab*cdabc*bd*+:=2021/9/1567.1.2三地址碼所謂三地址碼,是指這種代碼的每條指令最多只能包含三個(gè)地址,即兩個(gè)操作數(shù)地址和一個(gè)結(jié)果地址。如x+y*z三地址碼為:t1:=y*zt2:=x+t1三地址碼中地址的形式:名字、常量、編譯器生成的臨時(shí)變量。2021/9/1577.1.2三地址碼例7.2賦值語(yǔ)句a:=(-b)*(c+d)-(

4、c+d)的三地址碼如圖7.1所示t1:=minusbt2:=c+dt3:=t1*t2t4:=c+dt5:=t3-t4a:=t5圖7.1a:=(-b)*(c+d)-(c+d)的三地址碼2021/9/1587.1.2三地址碼1.形如x:=yopz的賦值指令;2.形如x:=opy的賦值指令;3.形如x:=y的復(fù)制指令;4.無(wú)條件跳轉(zhuǎn)指令gotoL;5.形如ifxgotoL(或iffalsexgotoL)的條件跳轉(zhuǎn)指令;6.形如ifxrelopygotoL的條件跳轉(zhuǎn)指令;7.過(guò)程調(diào)用和返回使用如下的指令來(lái)實(shí)現(xiàn):paramx用來(lái)指明參數(shù);callp,n和y=callp,n用來(lái)表示過(guò)程調(diào)用

5、和函數(shù)調(diào)用;returny表示過(guò)程返回;8.形如x:=y[i]和x[i]:=y的變址復(fù)制指令;9.形如x:=&y、x:=*y和*x:=y的地址和指針賦值指令。2021/9/159四元式四元式是一種比較常用的中間代碼形式,它由四個(gè)域組成,分別稱為op、arg1、arg2和result。op是一個(gè)一元或二元運(yùn)算符,arg1和arg2分別是op的兩個(gè)運(yùn)算對(duì)象,它們可以是變量、常量或編譯器生成的臨時(shí)變量,運(yùn)算結(jié)果則放入result中。圖7.2(a)圖7.1中三地址碼的四元式表示2021/9/1510三元式為了節(jié)省臨時(shí)變量的開(kāi)銷,有時(shí)也可以使用只有三個(gè)域的三元式來(lái)表示三地址碼。三元式的三

6、個(gè)域分別稱為op,arg1和arg2,op,arg1和arg2的含義與四元式類似,區(qū)別只是arg1和arg2可以是某個(gè)三元式的編號(hào)(圖7.2(b)中用圓括號(hào)括起來(lái)的數(shù)字),表示用該三元式的運(yùn)算結(jié)果作為運(yùn)算對(duì)象。圖7.2(b)圖7.1中三地址碼的三元式表示2021/9/1511生成三地址碼的語(yǔ)法制導(dǎo)定義2021/9/15127.1.3圖表示類似于表達(dá)式的抽象語(yǔ)法樹(shù)一樣,在dag(directedacyclicgraph)中,每個(gè)節(jié)點(diǎn)對(duì)應(yīng)一個(gè)運(yùn)算符,代表表達(dá)式的一個(gè)子表達(dá)式,其子節(jié)點(diǎn)則與該運(yùn)算符的運(yùn)算對(duì)象相對(duì)應(yīng),葉節(jié)點(diǎn)對(duì)應(yīng)的是變量或者常量,可以看成是原子運(yùn)算。利用dag可以很容易地

7、消除公共子表達(dá)式例7.3表達(dá)式a+a*(b-c)-(b-c)/d的dag如圖7.5所示。圖7.5a+a*(b-c)-(b-c)/d的dag圖2021/9/1513生成dag的語(yǔ)法制導(dǎo)定義產(chǎn)生式語(yǔ)義規(guī)則⑴E→E1+TE.node:=mknode('+',E1.node,T.node)⑵E→E1-TE.node:=mknode('-',E1.node,T.node)⑶E→TE.node:=T.node⑷T→T1*FT.node:=mknode('*',T1.node,F.node)⑸T→T1/F

當(dāng)前文檔最多預(yù)覽五頁(yè),下載文檔查看全文

此文檔下載收益歸作者所有

當(dāng)前文檔最多預(yù)覽五頁(yè),下載文檔查看全文
溫馨提示:
1. 部分包含數(shù)學(xué)公式或PPT動(dòng)畫的文件,查看預(yù)覽時(shí)可能會(huì)顯示錯(cuò)亂或異常,文件下載后無(wú)此問(wèn)題,請(qǐng)放心下載。
2. 本文檔由用戶上傳,版權(quán)歸屬用戶,天天文庫(kù)負(fù)責(zé)整理代發(fā)布。如果您對(duì)本文檔版權(quán)有爭(zhēng)議請(qǐng)及時(shí)聯(lián)系客服。
3. 下載前請(qǐng)仔細(xì)閱讀文檔內(nèi)容,確認(rèn)文檔內(nèi)容符合您的需求后進(jìn)行下載,若出現(xiàn)內(nèi)容與標(biāo)題不符可向本站投訴處理。
4. 下載文檔時(shí)可能由于網(wǎng)絡(luò)波動(dòng)等原因無(wú)法下載或下載錯(cuò)誤,付費(fèi)完成后未能成功下載的用戶請(qǐng)聯(lián)系客服處理。