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

下載本文檔

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

文檔簡介

1、第八章 語法制導(dǎo)翻譯和中間代碼生成8.1語法制導(dǎo)翻譯語法制導(dǎo)翻譯:在產(chǎn)生式中加入相應(yīng)的語義動作,并在語法分析的同時執(zhí)行這些語義動作。擴(kuò)充CFG語法符號屬性語法樹節(jié)點,記錄域產(chǎn)生式語義規(guī)則語法樹節(jié)點,用于計算屬性屬性類型綜合,synthesized,根據(jù)孩子節(jié)點屬性計算繼承,inherited,由父、兄弟節(jié)點屬性計算8.1 語法制導(dǎo)定義的形式每個產(chǎn)生式A 與一組語義規(guī)則相關(guān)聯(lián),每個語義規(guī)則具有如下形式:b = f(c1, c2, , ck),兩種可能情況b為A的綜合屬性,c1, c2, , ck為A、中語法符號的屬性b為中某個符號的繼承屬性,c1, c2, , ck為A、中語法符號的屬性b依賴c

2、1, c2, , ck例8.1digit.lexval:終結(jié)符只有綜合屬性,由詞法分析器提供開始符號通常沒有繼承屬性L E nprint(E.val)E E1 + TE.val = E1.val + T.val E TE.val = T.valT T1 * FT.val = T1.val * F.val T FT.val = F.val F (E)F.val = E.valF digitF.val = digit .lexval產(chǎn)生式語義規(guī)則8.2 自底向上計算S-屬性定義與LR(1)分析器結(jié)合在棧中保存語法符號的屬性值歸約時,利用棧中語法符號(產(chǎn)生式右部)屬性值計算新的(左部符號的)綜合屬性

3、值自底向上計算S-屬性定義示例A XYZ A.a = f(X.x,Y.y,Z.z)valntop=f(valtop-2, valtop-1, valtop)例8.2L E nprint(valtop)E E1 + Tvalntop=valtop-2+valtop E TT T1 * Fvalntop=valtop-2*valtop T FF (E)valntop=valtop-1 F digit產(chǎn)生式代碼片斷8.2 中間代碼一、逆波蘭表示法:后綴式1、把運算量寫在前面,算符寫在后面,不用括號的表示法。a*(b+c)=abc+*(a+b)*(c+d)=ab+cd+*2、計值方法:適合棧來計算:從

4、左到右掃描后綴式,碰到運算量就推進(jìn)棧;碰到K目運算就作用于棧頂?shù)腒項,并將運算結(jié)果代替這K項。abcab+ca*(b+c)3、后綴式的推廣推廣到比表達(dá)式更大的范圍例:if e then x else y可表示成exy#, #代表三目運算符if-then-else.二、三元式(op,arg1,arg2)A+B*C: OP ARG1 ARG2(1) * B C(2) + A (1) 間接三元式用一張間接碼表輔以三元式表,表示中間代碼。例:X:=(A+B)*C Y:=D(A+B)間接碼表 三元式表(1) op arg1 arg2(2) (1) + A B(3) (2) * (1) C (1) (3)

5、 := x (2) (4) (4) D (1)(5) (5) := Y (4)間接三元式優(yōu)點:便于優(yōu)化時調(diào)整運算順序,只需重新安排碼表,無需改動三元式表。相同的三元式無需重復(fù)填進(jìn)三元式表中,節(jié)省空間。三、四元式(OP,ARG1,ARG2,RESULT)A:=-B*(C+D) OP,ARG1,ARG2,RESULT(1) B - T1(2)+ C D T2(3)* T1 T2 T3 (4):= T3 - A優(yōu)點:便于優(yōu)化。8.3簡單算術(shù)表達(dá)式與賦值語句到四元式的翻譯一、例文法:A-i:=EE-E+E|E*E|-E|(E)|iNEWTEMP:函數(shù)過程。每次調(diào)用時,都回送一個代表新臨時變量名的整數(shù)碼

6、作為函數(shù)值,T1,T2,。ENTRY(i):函數(shù)過程,查符號表以確定i在表中的位置。E.PLACE:與非終結(jié)符E相聯(lián)系的語義變量,表示存放E值的變量名在符號表的入口或整數(shù)碼。GEN(OP,ARG1,ARG2,RESULT):一個語義過程,把一個四元式填入四元式表。二、類型轉(zhuǎn)換E.MODE:表示非終結(jié)符E的類型信息。例:X:=X+I*J(Xi,I,J,T1)(itr,T1,_,T2)(+r,Y,T2,T3)(:=,T3,_,X)8.4布爾表達(dá)式到四元式的翻譯一、布爾表達(dá)式:E-EE|EvE|E|(E)|i|i rop I計算布爾表達(dá)式的值有兩種方法:1、計值法2、采取優(yōu)化措施。二、作為條件控制的

7、布爾式翻譯:三、回填。8.5控制語句的翻譯一、標(biāo)號和轉(zhuǎn)移語句(goto L)語句形式:L:S;1、若goto L是向后轉(zhuǎn)移的語句,則L已經(jīng)定義了,可立即產(chǎn)生出四元式(j,_,_,_p)2、若goto L是向前轉(zhuǎn)移語句,則L未定義。產(chǎn)生一個不完全的四元式(j,_,_,_),它的轉(zhuǎn)移目標(biāo)待L定義時再回填。二、條件語句文法:S-if E then S | if E then S else S | while E do S | begin L end | AL-L,S |S三、循環(huán)語句S-for i:=E1 step E2 until E3 do S1四、分叉語句:語法:case E of c1:S1; c2:S2;

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論