第八章語法制導(dǎo)翻譯和中間代碼生成_第1頁
第八章語法制導(dǎo)翻譯和中間代碼生成_第2頁
第八章語法制導(dǎo)翻譯和中間代碼生成_第3頁
第八章語法制導(dǎo)翻譯和中間代碼生成_第4頁
第八章語法制導(dǎo)翻譯和中間代碼生成_第5頁
已閱讀5頁,還剩16頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)

文檔簡介

第八章語法制導(dǎo)翻譯和中間代碼生成8.1概述8.2屬性文法和語法制導(dǎo)翻譯8.3語義分析8.4中間代碼8.5一些語句的翻譯中間代碼何謂中間代碼(Intermediatecode)源程序的一種內(nèi)部表示,不依賴目標(biāo)機的結(jié)構(gòu),易于機械生成目標(biāo)代碼的中間表示為什麼要此階段邏輯結(jié)構(gòu)清楚;利于不同目標(biāo)機上實現(xiàn)同一種語言;利于進行與機器無關(guān)的優(yōu)化;這些內(nèi)部形式也能用于解釋。中間代碼的幾種形式逆波蘭四元式三元式間接三元式樹例:A+B*(C-D)+E/(C-D)^N逆波蘭:ABCD-*+ECD–N^/+四元式:(1)(-CDT1)(2)(*BT1T2)(3)(+AT2T3)(4)(-CDT4)(5)(^T4NT5)(6)(/ET5T6)(7)(+T3T6T7)例:A+B*(C-D)+E/(C-D)^N三元式:(1)(-CD)

(2)(*B(1))(3)(+A(2))(4)(-CD)(5)(^(4)N)(6)(/E(5))(7)(+(3)(6))例:A+B*(C-D)+E/(C-D)^N

間接三元式:間接三元式序列

(1)(-CD)(2)(*B(1))(3)(+A(2))(4)(^(1)N)(5)(/E(4))(6)(+(3)(5))

簡單賦值語句的(四元式)翻譯四元式形式:(op,arg1,arg2,result)或

result:=arg1oparg2語義屬性:,E.place函數(shù):lookup();過程:emit(t:=arg1oparg2);

newtemp;產(chǎn)生式和語義描述:

1、Sid:=E{P:=lookup();ifPnilthenemit(P“:=”E.place)elseerror}(2)EE1+E2

{E.place:=newtemp;

emit(E.place“:=”E1.place“+”E2.place)}(3)E-E1

{E.place:=newtemp;

emit(E.place“:=”“uminus”E1.place)}(4)E(E1)

{E.place:=E1.place}(5)Eid{E.place:=newtemp;

P:=lookup();

ifPnilthenE.place:=P

elseerror}控制語句的翻譯-控制語句中布爾表達式的翻譯ifEthenS1elseS2BS1S2NYE代碼S1代碼JumpoutS2代碼真假E.true:E.false:E:aropbifaropbgotoE.true

gotoE.false如:a<borc<dande<f可翻譯成如下四元式:1.ifa<bgotoE.truegoto(3)3.ifc<dgoto(5)4.

gotoE.false5.ife<fgotoE.true6.gotoE.false(翻譯不是最優(yōu))把條件轉(zhuǎn)移的布爾表達式E翻譯成僅含

條件真轉(zhuǎn)和無條件轉(zhuǎn)的四元式語句

ifa<borc<dande<fthenS1elseS2的四元式1.ifa<bgoto(7)//轉(zhuǎn)移至(E.true)2.goto(3)3.ifc<dgoto(5)4.goto(p+1)//轉(zhuǎn)移至(E.false)5.ife<fgoto(7)//轉(zhuǎn)移至(E.true)6.

goto(p+1)//轉(zhuǎn)移至(E.false)7.S1的四元式//(E.true)入口……(p-1)……(p).goto(q)(p+1).S2的四元式//(E.false)入口

……(q-1)…………記錄需回填地址的四元式,把需回填E.true的四元式拉成一鏈,把需回填E.false的四元式拉成一鏈,分別稱做“真”鏈和“假”鏈(10)…gotoE.true…(20)…gotoE.true…(30)…gotoE.true則鏈成(10)…goto(0)…(20)…goto(10)…(30)…goto(20)把地址(30)稱作“真”鏈鏈?zhǔn)祝盀殒溛矘?biāo)志,即地址(10)為“真”鏈鏈尾。語義描述使用的變量和過程:E.true“真”鏈,E.false:“假”鏈

E.codebegin:E的第一個四元式

Nextstat:下一四元式地址過程:emit()輸出一條四元式,而nextstat+1merge(p1,p2)把p1的鏈?zhǔn)滋钤趐2的鏈尾例:

merge(p1,p2)(p10)goto(0)

……

p1鏈(p100)

goto(p10)……`(p1)goto(p100)(p20)goto(0)(p100)……

p2鏈(p200)goto(p20)……(p2)goto(p200)

backpatch(p,t)

把鏈?zhǔn)譸所鏈接的每個四元式的第四區(qū)段都填為GOTO語句翻譯—拉鏈返填:

因為在生成四元式時轉(zhuǎn)移地址還沒產(chǎn)生,只有在整個布爾表達式的四元式產(chǎn)生完畢后才知道,才回填這個地址……(10)

gotoE.true……(20)

gotoE.true……(30)

gotoE.true……(40)E.true:…………(10)

goto(0)

鏈尾(10)……(20)

goto(10)……(30)

goto(20)

鏈頭(30)……(40)E.true:……控制結(jié)構(gòu)的翻譯While(A<B)doIf(C<D)thenX:=Y+Z

翻譯成四元式:

IfA<Bgoto102Goto107ifC<Dgoto104

goto100T:=Y+ZX:=T

goto100For循環(huán)語句語句形式:Fori:=E1stepE2untilE3doSi:=E;GotoOVERAGAIN:i:=i+E2;OVER:Ifi<=E3then{BeginS1;gotoAGAINend;}Else

數(shù)組和結(jié)構(gòu)的翻譯數(shù)據(jù)表示(固定長度,直接或間接表示)簡單變量:

char:1byteintegers:2or4bytesfloats:4to16bytesbooleans:1bit(butusually1byte)指針:unsignedintegers一維數(shù)組:一塊連續(xù)的存儲區(qū)多維數(shù)組:一塊連續(xù)的存儲區(qū),按行存放結(jié)構(gòu)(記錄):把所有域(field)存放在一塊連續(xù)的存儲區(qū)對象:類的實例變量象結(jié)構(gòu)的域一樣存放在一塊連續(xù)的存儲區(qū),但方法(成員函數(shù))不存在該對象里指令:l

可變(動態(tài))數(shù)組:若一個數(shù)組所需的存儲空間的大小在編譯時就已知道,則稱它為確定數(shù)組,否則稱為可變(動態(tài))數(shù)組。數(shù)組內(nèi)情向量::

編譯將數(shù)組的有關(guān)信息記錄在一些單元中,稱為數(shù)組的“內(nèi)情向量”A[l1:u1,l2:u2,,ln

:un]

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論