中間代碼生成

中間代碼生成

ID:43926511

大?。?.11 MB

頁數(shù):155頁

時間:2019-10-16

中間代碼生成_第1頁
中間代碼生成_第2頁
中間代碼生成_第3頁
中間代碼生成_第4頁
中間代碼生成_第5頁
資源描述:

《中間代碼生成》由會員上傳分享,免費在線閱讀,更多相關(guān)內(nèi)容在行業(yè)資料-天天文庫。

1、中間代碼生成第八章中間代碼生成中間代碼說明語句的翻譯賦值語句的翻譯控制語句的翻譯(if、循環(huán))屬性文法的實現(xiàn)過程調(diào)用的翻譯8.1中間代碼作用過渡:經(jīng)過語義分析被譯成中間代碼序列形式中間語言的語句優(yōu)點便于編譯系統(tǒng)的實現(xiàn)、移植、代碼優(yōu)化常用的中間代碼(語言)三地址代碼(四元式)語法(結(jié)構(gòu))樹(三元式)(5.2節(jié))后綴式——逆波蘭表示(2.3節(jié))特點形式簡單、語義明確、便于翻譯獨立于目標語言例8-1表達式(A-12)*B+6的中間代碼+*6-A12B三地址碼T1=A-12T2=T1*BT3=T2+6四元組(-,A,12,T1)(

2、*,T1,B,T2)(+,T2,6,T3)三元組①(-,A,12)②(*,①,B)③(+,②,6)波蘭表示+*-A12B6逆波蘭表示A12-B*6+如何生成語言結(jié)構(gòu)的三地址碼類似于構(gòu)建語法樹生成后綴表示以S:=(A-12)*B+6為例 將賦值語句變換為語法結(jié)構(gòu)樹屬性設(shè)置E.p是語法結(jié)構(gòu)樹指針id.entry是名字的符號表入口num.val是數(shù)值基本函數(shù)——結(jié)點構(gòu)造mknode建中間結(jié)點mkleaf建葉結(jié)點6A12-+B*S:=生成賦值語句語法樹的語法制導(dǎo)定義例8-2:a:=b*(-c)+b*(-34)的語法結(jié)構(gòu)樹——直觀描

3、述:=*-0+*-0idbnum34idbidcidaroot語法結(jié)構(gòu)樹——數(shù)組存儲形式地址算符操作數(shù)操作數(shù)012345678910a:=b*(-c)+b*(-34)以語法分析為中心后綴式(逆波蘭表示)操作數(shù)1,操作數(shù)2,運算符操作數(shù),運算符例8-7:a:=b*(-c)+b*(-34)的后綴式abc-*b34-*+:=生成后綴式的屬性文法三地址代碼一般形式x:=yopz其中x,y,z為變量名、常數(shù)或編譯產(chǎn)生的臨時變量四元式(op,y,z,x)種類:x:=yopz雙目運算x:=opy單目運算x:=y賦值語句ifxrelopy

4、gotol條件轉(zhuǎn)移語句(relop,x,y,l)其它語句的三地址代碼gotol無條件轉(zhuǎn)移paramx實在參數(shù)callp,n過程調(diào)用returnx過程返回x:=y[i]數(shù)組運算x[i]:=yx:=&y指針運算x:=*y*x=y生成三地址碼的屬性文法8.2說明語句的翻譯作用說明語句(Declarations)用于對程序中規(guī)定范圍內(nèi)使用的各類變量、常數(shù)、過程進行說明編譯要完成的工作在符號表中記錄被說明對象的屬性,為執(zhí)行做準備要關(guān)心的問題類型基本類型/內(nèi)部類型(built-in):整型、實型、雙精度型、邏輯型、字符型用戶定義類型—

5、—結(jié)構(gòu)描述作用域——有效范圍一般:說明所在的分程序、過程要關(guān)心的問題類型的作用引入數(shù)據(jù)抽象、隱蔽數(shù)據(jù)的基本表示用戶無需注明字節(jié)數(shù)規(guī)定可用的運算類型檢查數(shù)據(jù)精度控制規(guī)定存儲單元的字節(jié)數(shù),優(yōu)化空間管理變量說明的翻譯在符號表中填寫變量的屬性種別、類型、相對地址、作用域……等相對地址全局變量表示為靜態(tài)數(shù)據(jù)區(qū)的偏移值(offset)局部變量表示為局部數(shù)據(jù)區(qū)(活動記錄部分)的偏移值兩種數(shù)據(jù)區(qū)例8-3:相對地址舉例名字相對地址x0i64j68X[1]X[2]……X[8]ij08566468beginrealx[8];integeri,j

6、;……end文法描述P→DD→D;DD→id:TT→integerT→realT→array[num]ofT1T→^T1例如:a:integer;b:real;c:array[10]ofrealTTTDDDDPD屬性、過程、與全局量文法變量T(類型)的屬性type類型width占用的字節(jié)數(shù)基本子程序enter:設(shè)置變量的類型和地址array:數(shù)組類型處理全局量offset:已分配空間字節(jié)數(shù)說明語句的翻譯模式P→{offset:=0}DD→D;DD→id:T{enter(id.name,T.type,offset);offs

7、et:=offset+T.width}T→integer{T.type:=integer;T.width:=4}T→real{T.type:=real;T.width:=8}T→array[num]ofT1{T.type:=array(num.val,T1.type);T.width:=num.val*T1.width}T→↑T1{T.type:=pointer(T1.type);T.width:=4}P→MDM→?{offset:=0}例8-4x:real;i:integer的翻譯enter(x,real,0)offse

8、t=0offset=8T.type=realT.width=8offset=12T.type=integerT.width=4enter(i,integer,8)D→id:T{enter(id.name,T.type,offset);offset:=offset+T.width}例8-4x:real;i

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

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

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