編譯原理課件 第六章.ppt_第1頁
編譯原理課件 第六章.ppt_第2頁
編譯原理課件 第六章.ppt_第3頁
編譯原理課件 第六章.ppt_第4頁
編譯原理課件 第六章.ppt_第5頁
已閱讀5頁,還剩69頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、第六章 屬性文法和語法制導(dǎo)翻譯,1屬性文法 2基于屬性文法的處理 3S-屬性文法的自下而上計算 4L-屬性文法和自頂向下翻譯 5自下而上計算繼承屬性,6.1 屬性文法,屬性文法(也稱屬性翻譯文法) Knuth在1968年提出 在上下文無關(guān)文法的基礎(chǔ)上,為每個文法符號(終結(jié)符或非終結(jié)符)配備若干相關(guān)的“值”(稱為屬性)。 屬性代表與文法符號相關(guān)信息,如類型、值、代碼序列、符號表內(nèi)容等 屬性可以進行計算和傳遞 語義規(guī)則:對于文法的每個產(chǎn)生式都配備了一組屬性的計算規(guī)則,屬性 綜合屬性:“自下而上”傳遞信息 繼承屬性:“自上而下”傳遞信息 在一個屬性文法中,對應(yīng)于每個產(chǎn)生式A都有一套與之相關(guān)聯(lián)的語義規(guī)

2、則,每條規(guī)則的形式為: b:=f(c1,c2,ck) 這里,f是一個函數(shù),而且或者 1. b是A的一個綜合屬性并且c1,c2,ck是產(chǎn)生式右邊文法符號的屬性,或者 2. b是產(chǎn)生式右邊某個文法符號的一個繼承屬性并且c1,c2,ck 是A或產(chǎn)生式右邊任何文法符號的屬性。 屬性b依賴于屬性c1,c2,ck。,說明 終結(jié)符只有綜合屬性,由詞法分析器提供 非終結(jié)符既可有綜合屬性也可有繼承屬性,文法開始符號的所有繼承屬性作為屬性計算前的初始值 對出現(xiàn)在產(chǎn)生式右邊的繼承屬性和出現(xiàn)在產(chǎn)生式左邊的綜合屬性都必須提供一個計算規(guī)則。屬性計算規(guī)則中只能使用相應(yīng)產(chǎn)生式中的文法符號的屬性 出現(xiàn)在產(chǎn)生式左邊的繼承屬性和出

3、現(xiàn)在產(chǎn)生式右邊的綜合屬性不由所給的產(chǎn)生式的屬性計算規(guī)則進行計算,它們由其它產(chǎn)生式的屬性規(guī)則計算或者由屬性計算器的參數(shù)提供,語義規(guī)則所描述的工作可以包括屬性計算、靜態(tài)語義檢查、符號表操作、代碼生成等等。 例,考慮非終結(jié)符A,B和C,其中,A有一個繼承屬性a和一個綜合屬性b,B有綜合屬性c,C有繼承屬性d。產(chǎn)生式ABC可能有規(guī)則 C.d:=B.c+1 A.b:=A.a+B.c 而屬性A.a和B.c在其它地方計算,產(chǎn) 生 式 LEn EE1+T ET TT1*F TF F (E) Fdigit,語 義 規(guī) 則 print(E.val) E.val := E1.val+T.val E.val :=T.

4、val T.val :=T1.val* F.val T.val :=F.val F.val :=E.val F.val :=digit.lexval,綜合屬性 在語法樹中,一個結(jié)點的綜合屬性的值由其子結(jié)點的屬性值確定。 使用自底向上的方法在每一個結(jié)點處使用語義規(guī)則計算綜合屬性的值 僅僅使用綜合屬性的屬性文法稱S屬性文法,產(chǎn) 生 式 LEn EE1+T ET TT1*F TF F (E) Fdigit,語 義 規(guī) 則 print(E.val) E.val := E1.val+T.val E.val :=T.val T.val :=T1.val* F.val T.val :=F.val F.val

5、 :=E.val F.val :=digit.lexval,3*5+4n的帶注釋的語法樹,digit.lexval=3,F.val=3,T.val=3,*,digit.lexval=5,F.val=5,T.val=15,E.val=15,+,digit.lexval=4,F.val=4,T.val=4,E.val=19,n,L,產(chǎn) 生 式 語 義 規(guī) 則 LEn print(E.val) EE1+T E.val := E1.val+T.val ET E.val :=T.val TT1*F T.val :=T1.val* F.val TF T.val :=F.val F (E) F.val :=

6、E.val Fdigit F.val :=digit.lexval,繼承屬性 在語法樹中,一個結(jié)點的繼承屬性由此結(jié)點的父結(jié)點和/或兄弟結(jié)點的某些屬性確定 用繼承屬性來表示程序設(shè)計語言結(jié)構(gòu)中的上下文依賴關(guān)系很方便,產(chǎn) 生 式 語 義 規(guī) 則 DTLL.in := T.type TintT.type := integer TrealT.type := real LL1, idL1.in :=L.in addtype(id.entry, L.in) Lid addtype(id.entry, L.in),句子real id1,id2,id3的帶注釋的語法樹,id1,L,id2,L,id3,L,rea

7、l,T,D,T.type=real,L.in=real,L.in=real,L.in=real,產(chǎn) 生 式 語 義 規(guī) 則 DTL L.in := T.type Tint T.type := integer Treal T.type := real LL1, id L1.in :=L.in addtype(id.entry, L.in) Lid addtype(id.entry, L.in),6.2 基于屬性文法的的處理方法,由源程序的語法結(jié)構(gòu)所驅(qū)動的處理辦法就是語法制導(dǎo)翻譯法 語義規(guī)則的計算 產(chǎn)生代碼 在符號表中存放信息 給出錯誤信息 執(zhí)行任何其它動作 對輸入符號串的翻譯也就是根據(jù)語義規(guī)則進

8、行計算的結(jié)果。,輸入串,語法樹,依賴圖,語義規(guī)則計算次序,6.2 基于屬性文法的的處理方法,依賴圖 樹遍歷 一遍掃描,6.2.1 依賴圖,在一棵語法樹中的結(jié)點的繼承屬性和綜合屬性之間的相互依賴關(guān)系可以由稱作依賴圖的一個有向圖來描述 為每一個包含過程調(diào)用的語義規(guī)則引入一個虛綜合屬性b,這樣把每一個語義規(guī)則都寫成 b:=f(c1,c2,ck) 的形式 依賴圖中為每一個屬性設(shè)置一個結(jié)點,如果屬性b依賴于屬性c,則從屬性c的結(jié)點有一條有向邊連到屬性b的結(jié)點。,for 語法樹中每一結(jié)點n do for 結(jié)點n的文法符號的每一個屬性a do 為a在依賴圖中建立一個結(jié)點; for語法樹中每一個結(jié)點n do

9、for 結(jié)點n所用產(chǎn)生式對應(yīng)的每一個語義規(guī)則 b:=f(c1,c2,ck ) do for i:=1 to k do 從ci結(jié)點到b結(jié)點構(gòu)造一條有向邊;,EE1E2 E.val:=E1.val+E2.val,E1,+,E2,E,val,val,val,句子real id1,id2,id3的帶注釋的語法樹的依賴圖,id1,L,id2,L,id3,L,real,T,D,4 type,5 in,6 - addtype(id.entry, L.in),7 in,8 addtype,9 in,10 addtype,1 entry,2 entry,3 entry,產(chǎn) 生 式 語 義 規(guī) 則 DTL L.i

10、n := T.type Tint T.type := integer Treal T.type := real LL1, id L1.in :=L.in addtype(id.entry, L.in) Lid addtype(id.entry, L.in),如果一屬性文法不存在屬性之間的循環(huán)依賴關(guān)系,那么稱該文法為良定義的,屬性的計算次序,一個依賴圖的任何拓?fù)渑判蚨冀o出一個語法樹中結(jié)點的語義規(guī)則計算的有效順序 屬性文法說明的翻譯是很精確的 基礎(chǔ)文法用于建立輸入符號串的語法分析樹 根據(jù)語義規(guī)則建立依賴圖 從依賴圖的拓?fù)渑判蛑校覀兛梢缘玫接嬎阏Z義規(guī)則的順序,輸入串,語法樹,依賴圖,語義規(guī)則計算次

11、序,句子real id1,id2,id3的帶注釋的語法樹的依賴圖,a4:=real; a5:=a4 addtype (id3.entry,a5); a7:=a5; addtype (id2.entry,a7); a9:=a7 addtype (id1.entry,a9);,6.2 基于屬性文法的的處理方法,依賴圖 樹遍歷 一遍掃描,6.2.2 樹遍歷的屬性計算方法,通過樹遍歷的方法計算屬性的值 假設(shè)語法樹已建立,且樹中已帶有開始符號的繼承屬性和終結(jié)符的綜合屬性 以某種次序遍歷語法樹,直至計算出所有屬性 深度優(yōu)先,從左到右的遍歷,While 還有未被計算的屬性 do VisitNode(S) /

12、*S是開始符號*/ procedure VisitNode (N:Node) ; begin if N是一個非終結(jié)符 then /*假設(shè)它的產(chǎn)生式為NX1Xm*/ for i :=1 to m do if XiVN then /*即Xi是非終結(jié)符*/ begin 計算Xi的所有能夠計算的繼承屬性; VisitNode (Xi) end; 計算N的所有能夠計算的綜合屬性 end,產(chǎn) 生 式語 義 規(guī) 則 SXYZ Z.h := S.a X.c := Z.g S.b := X.d -2 Y.e := S.b Xx X.d :=2*X.c Yy Y.f := Y.e*3 Zz Z.g :=Z.h+1

13、,例 考慮屬性的文法G。其中,S有繼承屬性a,綜合屬性b;X有繼承屬性c、綜合屬性d;Y有繼承屬性e、綜合屬性f;Z有繼承屬性h、綜合屬性g,假設(shè)S.a的初始值為0,輸入串為xyz,S:a=0,X,Y,Z,x,y,z,Z:h=0 g=1,X:c=1 d=2,S:a=0, b=0,Y:e=0 f=0,產(chǎn) 生 式語 義 規(guī) 則 SXYZ Z.h := S.a X.c := Z.g S.b := X.d -2 Y.e := S.b Xx X.d :=2*X.c Yy Y.f := Y.e*3 Zz Z.g :=Z.h+1,6.2 基于屬性文法的的處理方法,依賴圖 樹遍歷 一遍掃描,6.2.3 一遍掃

14、描的處理方法,一遍掃描的處理方法是在語法分析的同時計算屬性值 所采用的語法分析方法 屬性的計算次序 L屬性文法適合于一遍掃描的自上而下分析 S屬性文法適合于一遍掃描的自下而上分析,所謂語法制導(dǎo)翻譯法,直觀上說就是為文法中每個產(chǎn)生式配上一組語義規(guī)則,并且在語法分析的同時執(zhí)行這些語義規(guī)則 語義規(guī)則就被計算的時機 在自上而下語法分析中,一個產(chǎn)生式匹配輸入串成功時 在自下而上分析中,當(dāng)一個產(chǎn)生式被用于進行歸約時,6.2.4 抽象語法樹,在語法樹中去掉那些對翻譯不必要的信息,從而獲得更有效的源程序中間表示。這種經(jīng)變換后的語法樹稱之為抽象語法樹(Abstract Syntax Tree),Sif B th

15、en S1 else S2,3*5+4,建立表達式的抽象語法樹,mknode (op,left,right) 建立一個運算符號結(jié)點,標(biāo)號是op,兩個域left和right分別指向左子樹和右子樹。 mkleaf (id,entry) 建立一個標(biāo)識符結(jié)點,標(biāo)號為id,一個域eutry指向標(biāo)識符在符號表中的入口。 mkleaf (num,val) 建立一個數(shù)結(jié)點,標(biāo)號為num,一個域val用于存放數(shù)的值。,建立抽象語法樹的語義規(guī)則,產(chǎn) 生 式 語 義 規(guī) 則 EE1+TE.nptr := mknode( +, E1.nptr, T.nptr ) EE1-TE.nptr := mknode( -, E

16、1.nptr, T.nptr ) ETE.nptr := T.nptr T (E) T.nptr := E.nptr TidT.nptr := mknode( id, id.entry ) Tnum T.nptr := mknode( num, num.val ),a4c的抽象語法樹,E nptr,T nptr,E nptr,To entry for a,E,T nptr,id,-,T nptr,id,To entry for c,一遍掃描的處理方法,一遍掃描的處理方法是在語法分析的同時計算屬性值 所采用的語法分析方法 屬性的計算次序 L屬性文法適合于一遍掃描的自上而下分析 S屬性文法適合于一

17、遍掃描的自下而上分析,6.3 S-屬性文法的自下而上計算,S-屬性文法:只含有綜合屬性 綜合屬性可以在分析輸入符號串的同時由自下而上的分析器來計算。 分析器可以保存與棧中文法符號有關(guān)的綜合屬性值,每當(dāng)進行歸約時,新的屬性值就由棧中正在歸約的產(chǎn)生式右邊符號的屬性值來計算。,在分析棧中使用一個附加的域來存放綜合屬性值 假設(shè)語義規(guī)則A.a:=f(X.x,Y.y,Z.z)是對應(yīng)于產(chǎn)生式AXYZ的,產(chǎn)生式 代 碼 段 LEnprint(valtop) EE1+Tvalntop := valtop-2+valtop ET TT1*Fvalntop := valtop-2*valtop TF F (E)va

18、lntop :=valtop-1 Fdigit,產(chǎn) 生 式 語 義 規(guī) 則 LEn print(E.val) EE1+T E.val := E1.val+T.val ET E.val :=T.val TT1*F T.val :=T1.val* F.val TF T.val :=F.val F (E) F.val :=E.val Fdigit F.val :=digit.lexval,輸入 statesym val 用到的產(chǎn)生式 3*5+4n 0 # - *5+4n 05#3 -3 *5+4n 03 #F -3 Fdigit *5+4n 02 #T -3 TF 5+4n 027#T* -3 -

19、+4n 0275 #T*5 -3 - 5,產(chǎn)生式 代 碼 段 LEnprint(valtop) EE1+Tvalntop := valtop-2+valtop ET TT1*Fvalntop := valtop-2*valtop TF F (E)valntop :=valtop-1 Fdigit,輸入 statesym val 用到的產(chǎn)生式 +4n 0275 #T*5 -3 - 5 +4n 02710#T*F -3 - 5 Fdigit +4n 02 #T -15 TT*F +4n 01 #E -15 ET 4n 016 #E+ -15- n 0165 #E+4 -15- 4,產(chǎn)生式 代 碼

20、段 LEnprint(valtop) EE1+Tvalntop := valtop-2+valtop ET TT1*Fvalntop := valtop-2*valtop TF F (E)valntop :=valtop-1 Fdigit,輸入 statesym val 用到的產(chǎn)生式 n 0165 #E+4 -15- 4 n 0163 #E+F -15- 4Fdigit n 0169 #E+T -15- 4TF n 01#E -19EE+T #En -19- #L -19 LEn,產(chǎn)生式 代 碼 段 LEnprint(valtop) EE1+Tvalntop := valtop-2+valto

21、p ET TT1*Fvalntop := valtop-2*valtop TF F (E)valntop :=valtop-1 Fdigit,一遍掃描的處理方法,一遍掃描的處理方法是在語法分析的同時計算屬性值 所采用的語法分析方法 屬性的計算次序 L屬性文法適合于一遍掃描的自上而下分析 S屬性文法適合于一遍掃描的自下而上分析,6.4 L-屬性文法和自頂向下翻譯,通過深度優(yōu)先的方法對語法樹進行遍歷,計算屬性文法的所有屬性值 LL(1):自上而下分析方法,深度優(yōu)先建立語法樹,一個屬性文法稱為L-屬性文法,如果對于每個產(chǎn)生式AX1X2Xn,其每個語義規(guī)則中的每個屬性或者是綜合屬性,或者是Xj(1jn

22、)的一個繼承屬性且這個繼承屬性僅依賴于: (1) 產(chǎn)生式Xj的左邊符號X1,X2,Xj-1的屬性; (2) A的繼承屬性。 S-屬性文法一定是L-屬性文法,產(chǎn) 生 式 語 義 規(guī) 則 ALM L.i := l(A.i) M.i :=m(L.s) AQR R.i := r(A.i) Q.i :=q(R.s) A.s :=f(Q.s),6.4.1 翻譯模式,翻譯模式:給出了使用語義規(guī)則進行計算的次序,這樣就可把某些實現(xiàn)細(xì)節(jié)表示出來 在翻譯模式中,和文法符號相關(guān)的屬性和語義規(guī)則(這里我們也稱語義動作),用花括號 括起來,插入到產(chǎn)生式右部的合適位置上,翻譯模式示例:把帶加號和減號的中綴表達式翻譯成相應(yīng)

23、的后綴表達式,ETR Raddop T print(addop.lexeme) R1 | Tnum print(num.val) 例:9-5+2,-,E,T,R,9,print(9),T,R,5,print(5),print(-),+,T,2,print(2),R,print(+),設(shè)計翻譯模式的原則,設(shè)計翻譯模式時,必須保證當(dāng)某個動作引用一個屬性時它必須是有定義的。 L-屬性文法本身就能確保每個動作不會引用尚未計算出來的屬性。,建立翻譯模式,當(dāng)只需要綜合屬性時:為每一個語義規(guī)則建立一個包含賦值的動作,并把這個動作放在相應(yīng)的產(chǎn)生式右邊的末尾 產(chǎn)生式 語義規(guī)則 TT1*FT.val:=T1.va

24、lF.val 建立產(chǎn)生式和語義動作: TT1*F T.val:=T1.valF.val,建立翻譯模式,如果既有綜合屬性又有繼承屬性,在建立翻譯模式時就必須保證: 1. 產(chǎn)生式右邊的符號的繼承屬性必須在這個符號以前的動作中計算出來。 2. 一個動作不能引用這個動作右邊的符號的綜合屬性。 3. 產(chǎn)生式左邊非終結(jié)符的綜合屬性只有在它所引用的所有屬性都計算出來以后才能計算。計算這種屬性的動作通常可放在產(chǎn)生式右端的末尾。 SA1A2A1.in:=1; A2.in:=2 Aa print(A.in),基于數(shù)學(xué)格式語言EQN,給定輸入 E sub n .val,En.val,識別輸入并進行格式安放的L-屬性

25、文法,產(chǎn)生式 語義規(guī)則 SB B.ps :=10 S.ht :=B.ht BB1B2 B1.ps :=B.ps B2.ps :=B.ps B.ht := max(B1.ht, B2.ht) BB1 sub B2B1.ps :=B.ps B2.ps :=shrink(B.ps) B.ht :=disp(B1.ht, B2.ht) Btext B.ht :=text.hB.ps,翻譯模式,S B.ps:=10 B S.ht:=B.ht B B1.ps:=B.ps B1 B2.ps:=B.ps B2 B.ht:=max(B1.ht,B2.ht) B B1.ps:=B.ps B1 sub B2.ps:

26、=shrink(B.ps) B2 B.ht:=disp(B1.ht,B2.ht) B textB.ht:=text.hB.ps,1. 產(chǎn)生式右邊的符號的繼承屬性必須在這個符號以前的動作中計算出來。 2. 一個動作不能引用這個動作右邊的符號的綜合屬性。 3. 產(chǎn)生式左邊非終結(jié)符的綜合屬性只有在它所引用的所有屬性都計算出來以后才能計算。計算這種屬性的動作通常放在產(chǎn)生式右端的末尾。,6.4.2 自頂向下翻譯,動作是在處于相同位置上的符號被展開(匹配成功)時執(zhí)行的。 為了構(gòu)造不帶回溯的自頂向下語法分析,必須消除文法中的左遞歸 當(dāng)消除一個翻譯模式的基本文法的左遞歸時同時考慮屬性適合帶綜合屬性的翻譯模式,

27、關(guān)于算術(shù)表達式的左遞歸文法相應(yīng)的翻譯模式 EE1+TE.val:=E1.val+T.val EE1-T E.val:=E1.val-T.val ET E.val:=T.val T(E)T.val:=E.val TnumT.val:=num.val,E T R R + T R1 R - T R1 R T ( E ) T num,消除左遞歸,構(gòu)造新的翻譯模式 E TR.i:=T.val RE.val:=R.s R + TR1.i:=R.i+T.val R1R.s:=R1.s R - TR1.i:=R.i-T.val R1R.s:=R1.s R R.s:=R.i T ( E )T.val:=E.va

28、l T numT.val:=num.val,E T R R +TR1 R -TR1 R T ( E ) T num R.i: R前面子表達式 的值 R.s: 分析完R時子表 達式的值,計算表達式952,E,T,R,num,num.val=9,T.val=9,R.i=9,-,T,R,num,num.val=5,T.val=5,R.i=4,+,T,R,num,num.val=2,T.val=2,R.i=6,R.s=6,R.s=6,R.s=6,E.val=6,E T R.i:=T.val R E.val:=R.s R + T R1.i:=R.i+T.val R1 R.s:= R1.s R - T R

29、1.i:=R.i-T.val R1 R.s:= R1.s R R.s:=R.i T ( E ) T.val:=E.val T num T.val:=num.val ,一般方法,假設(shè)有翻譯模式: AA1YA.a:=g(A1.a,Y.y) AXA.a:=f(X.x) 它的每個文法符號都有一個綜合屬性,用小寫字母表示,g和f是任意函數(shù)。,消除左遞歸: AXR RYR | ,翻譯模式變?yōu)?: A XR.i:=f (X.x) RA.a:=R.s R Y R1.i:=g(R.i,Y.y) R1R.s:=R1.s R R.s:=R.i,R.i: R前面子表達式 的值 R.s: 分析完R時子表 達式的值,XY

30、Y,X,A,A.a=f(X.x),Y1,A,A.a=g(f(X.x),Y1.y),Y2,A,A.a=g(g(f(X.x),Y1.y), Y2.y),AA1YA.a:=g(A1.a,Y.y) AXA.a:=f(X.x),XYY,A,X,R,R.i=f(X.x),Y1,R,R.i= g(f(X.x),Y1.y),Y2,R,R.i= g(g(f(X.x),Y1.y), Y2.y),R.s= g(g(f(X.x),Y1.y), Y2.y),R.s= g(g(f(X.x),Y1.y), Y2.y),R.s= g(g(f(X.x),Y1.y), Y2.y),A.a= g(g(f(X.x),Y1.y), Y

31、2.y),A X R.i:=f (X.x) R A.a:=R.s R Y R1.i:=g(R.i,Y.y) R1 R.s:=R1.s R R.s:=R.i,構(gòu)造抽象語法樹的屬性文法定義轉(zhuǎn)化成翻譯模式,EE1+TE.nptr:=mknode(+,E1.nptr,T.nptr) EE1-TE.nptr:=mknode(-,E1.nptr,T.nptr) ETE.nptr:=T.nptr,構(gòu)造抽象語法樹的屬性文法定義轉(zhuǎn)化成翻譯模式,E TR.i:=T.nptr RE.nptr:=R.s R + TR1.i:=mknode(+,R.i,T.nptr) R1R.s:=R1.s R - TR1.i:=mk

32、node(,R.i,T.nptr) R1R.s:=R.s R R.s:=R.i T ( E )T.nptr:=E.nptr T idT.nptr:=mkleaf(id,id.entry) T numT.nptr:=mkleaf(num,num.val),使用繼承屬性構(gòu)造a4c的抽象語法樹,E,T,R,id,T.nptr,-,T,num,T.nptr,R. i,R,+,T,R,id,T.nptr,R. i,R. i,R. s,R. s,R. s,E.nptr,E T R.i:=T.nptr R E.nptr:=R.s R + T R1.i:=mknode(+,R.i,T.nptr) R1 R.s

33、:=R1.s R - T R1.i:=mknode(,R.i,T.nptr) R1 R.s:=R.s R R.s:=R.i T ( E ) T.nptr:=E.nptr T id T.nptr:=mkleaf(id,id.entry) T num T.nptr:=mkleaf(num,num.val),6.4.3 遞歸下降翻譯器的設(shè)計,如何在遞歸下降分析中實現(xiàn)翻譯模式,構(gòu)造遞歸下降翻譯器,設(shè)計遞歸下降翻譯器的方法,1. 對每個非終結(jié)符A構(gòu)造一個函數(shù)過程,對A的每個繼承屬性設(shè)置一個形式參數(shù) 函數(shù)的返回值為A的綜合屬性(作為記錄,或指向記錄的一個指針,記錄中有若干域,每個屬性對應(yīng)一個域)。為了簡單

34、,我們假設(shè)每個非終結(jié)只有一個綜合屬性 A對應(yīng)的函數(shù)過程中,為出現(xiàn)在A的產(chǎn)生式中的每一個文法符號的每一個屬性都設(shè)置一個局部變量。,設(shè)計遞歸下降翻譯器的方法,2. 非終結(jié)符A對應(yīng)的函數(shù)過程中,根據(jù)當(dāng)前的輸入符號決定使用哪個產(chǎn)生式候選。,設(shè)計遞歸下降翻譯器的方法,3. 每個產(chǎn)生式對應(yīng)的程序代碼中,按照從左到右的次序,對于單詞符號(終結(jié)符)、非終結(jié)符和語義動作分別作以下工作: i) 對于帶有綜合屬性x的終結(jié)符X,把x的值存入為X.x設(shè)置的變量中。然后產(chǎn)生一個匹配X的調(diào)用,并繼續(xù)讀入一個輸入符號。 ii) 對于每個非終結(jié)符B,產(chǎn)生一個右邊帶有函數(shù)調(diào)用的賦值語句c=B(b1,b2,bk),其中,b1,b2,bk是為B的繼承屬性設(shè)置的變量,c是為B的綜合屬性設(shè)置的變量。 iii) 對于語義動作,把動作的代碼抄進分析器中,用代表屬性的變量來代替對屬性的每一次引用。,構(gòu)造抽象語法樹的屬性文法定義轉(zhuǎn)化成翻譯模式,E TR.i:=T.nptr RE.nptr:=R.s R + TR1.i:=mknode(+,R.i,T.nptr)

溫馨提示

  • 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

提交評論