《編譯原理》第6章 屬性文法和語法制導翻譯_第1頁
《編譯原理》第6章 屬性文法和語法制導翻譯_第2頁
《編譯原理》第6章 屬性文法和語法制導翻譯_第3頁
《編譯原理》第6章 屬性文法和語法制導翻譯_第4頁
《編譯原理》第6章 屬性文法和語法制導翻譯_第5頁
已閱讀5頁,還剩71頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

編譯原理第六章屬性文法和語法制導翻譯編輯ppt源程序詞法分析器錯誤處理器符號管理表語法分析器語義分析器中間代碼生成器代碼優(yōu)化器代碼生成器編輯ppt第六章屬性文法和語法制導翻譯屬性文法基于屬性文法的處理方法S-屬性文法的自下而上計算L-屬性文法和自頂向下的翻譯編輯ppt6.1屬性文法屬性文法(也稱屬性翻譯文法)Knuth在1968年提出經典巨著:TheArtofComputerProgramming《計算機程序設計的藝術》計劃出七卷第一卷《基本算法》于1968年出版,第二卷《半數(shù)字化算法》于1969年出版,第三卷《排序與搜索》于1973年出版,第四卷A《組合算法》已于2011年出版。TEX被《美國科學家》雜志列為20世紀最重要的12本科學類專著之一,與愛因斯坦《相對論》比肩而立編輯ppt6.1屬性文法屬性文法(也稱屬性翻譯文法)Knuth在1968年提出在上下文無關文法的基礎上,為每個文法符號(終結符或非終結符)配備若干相關的“值”(稱為屬性)。屬性代表與文法符號相關信息,如類型、值、代碼序列、符號表內容等屬性可以進行計算和傳遞語義規(guī)則:對于文法的每個產生式都配備了一組屬性的計算規(guī)則

產生式

L→En E→E1+T E→T T→T1*F T→F F→(E) F→digit語義規(guī)則print(E.val)E.val:=E1.val+T.valE.val:=T.valT.val:=T1.val*F.valT.val:=F.valF.val:=E.valF.val:=digit.lexval編輯ppt屬性綜合屬性:“自下而上”傳遞信息繼承屬性:“自上而下”傳遞信息在一個屬性文法中,對應于每個產生式A→都有一套與之相關聯(lián)的語義規(guī)則,每條規(guī)則的形式為:b:=f(c1,c2,…,ck) 這里,f是一個函數(shù),而且或者1.b是A的一個綜合屬性并且c1,c2,…,ck是產生式右邊文法符號的屬性,或者2.b是產生式右邊某個文法符號的一個繼承屬性并且c1,c2,…,ck

是A或產生式右邊任何文法符號的屬性。屬性b依賴于屬性c1,c2,…,ck。

產生式

L→En E→E1+T E→T T→T1*F T→F F→(E) F→digit語義規(guī)則print(E.val)E.val:=E1.val+T.valE.val:=T.valT.val:=T1.val*F.valT.val:=F.valF.val:=E.valF.val:=digit.lexval編輯ppt說明終結符只有綜合屬性,由詞法分析器提供F→digitdigit.lexval非終結符既可有綜合屬性也可有繼承屬性,文法開始符號的所有繼承屬性為屬性計算前的初始值。F→digitF.val,digit.lexval屬性文法編輯ppt說明對出現(xiàn)在產生式右邊的繼承屬性和出現(xiàn)在產生式左邊的綜合屬性都必須提供一個計算規(guī)則。屬性計算規(guī)則中只能使用相應產生式中的文法符號的屬性F→digitF.val=digit.lexval出現(xiàn)在產生式左邊的繼承屬性和出現(xiàn)在產生式右邊的綜合屬性不由所給的產生式的屬性計算規(guī)則進行計算,它們由其它產生式的屬性規(guī)則計算或者由屬性計算器的參數(shù)提供語義規(guī)則所描述的工作可以包括屬性計算、靜態(tài)語義檢查、符號表操作、代碼生成等等。編輯ppt例,考慮非終結符A,B和C,其中,A有一個繼承屬性a和一個綜合屬性b,B有綜合屬性c,C有繼承屬性d。產生式A→BC可能有規(guī)則

C.d:=B.c+1A.b:=A.a+B.c而屬性A.a和B.c在其它地方計算編輯ppt產生式

L→En

E→E1+T E→T T→T1*F T→F F→(E) F→digit語義規(guī)則print(E.val)E.val:=E1.val+T.valE.val:=T.valT.val:=T1.val*F.valT.val:=F.valF.val:=E.valF.val:=digit.lexval屬性文法舉例編輯ppt綜合屬性在語法樹中,一個結點的綜合屬性的值由其子結點和它本身的屬性值確定。使用自底向上的方法在每一個結點處使用語義規(guī)則計算綜合屬性的值僅僅使用綜合屬性的屬性文法稱S-屬性文法編輯ppt產生式

L→En E→E1+T E→T T→T1*F T→F F→(E) F→digit語義規(guī)則print(E.val)E.val:=E1.val+T.valE.val:=T.valT.val:=T1.val*F.valT.val:=F.valF.val:=E.valF.val:=digit.lexvalS-屬性文法編輯ppt3*5+4n的帶注釋的語法樹digit.lexval=3F.val=3T.val=3*digit.lexval=5F.val=5T.val=15E.val=15+digit.lexval=4F.val=4T.val=4E.val=19nL

產生式語義規(guī)則

L→Enprint(E.val)E→E1+TE.val:=E1.val+T.valE→TE.val:=T.valT→T1*FT.val:=T1.val*F.valT→F T.val:=F.valF→(E)F.val:=E.valF→digitF.val:=digit.lexval編輯ppt繼承屬性在語法樹中,一個結點的繼承屬性由此結點的父結點和/或兄弟結點和其本身的某些屬性確定用繼承屬性來表示程序設計語言結構中的上下文依賴關系很方便編輯ppt 產生式 語義規(guī)則 D→TL L.in:=T.type T→int T.type:=integer T→real T.type:=real L→L1,id L1.in:=L.in

addtype(id.entry,L.in) L→id addtype(id.entry,L.in)編輯ppt句子realid1,id2,id3的帶注釋的語法樹id1L,id2L,id3LrealTDT.type=realL.in=realL.in=realL.in=real產生式 語義規(guī)則D→TLL.in:=T.typeT→int T.type:=integerT→realT.type:=realL→L1,idL1.in:=L.inaddtype(id.entry,L.in)L→id addtype(id.entry,L.in)編輯ppt第六章屬性文法和語法制導翻譯屬性文法基于屬性文法的處理方法S-屬性文法的自下而上計算L-屬性文法和自頂向下的翻譯編輯ppt6.2基于屬性文法的處理方法

這種由源程序的語法結構所驅動的處理辦法就是語法制導翻譯法語義規(guī)則的計算產生代碼在符號表中存放信息給出錯誤信息執(zhí)行任何其它動作對輸入符號串的翻譯也就是根據(jù)語義規(guī)則進行計算的結果。輸入串語法樹按照語義規(guī)則計算屬性基于屬性文法的處理過程通常為:編輯ppt6.2基于屬性文法的的處理方法

依賴圖樹遍歷一遍掃描編輯ppt6.2.1依賴圖在一棵語法樹中的結點的繼承屬性和綜合屬性之間的相互依賴關系可以由依賴圖(有向圖)來描述。為每一個包含過程調用的語義規(guī)則引入一個虛綜合屬性b,這樣把每一個語義規(guī)則都寫成b:=f(c1,c2,…,ck) 的形式。依賴圖中為每一個屬性設置一個結點,如果屬性b依賴于屬性c,則從屬性c的結點有一條有向邊連到屬性b的結點。編輯ppt對于一棵給定的語法樹,依賴圖按以下步驟構造:for語法樹中每一結點ndo for結點n的文法符號的每一個屬性ado

為a在依賴圖中建立一個結點;for語法樹中每一個結點ndo for結點n所用產生式對應的每一個語義規(guī)則

b:=f(c1,c2,…,ck)do fori:=1tokdo

從ci結點到b結點構造一條有向邊;編輯pptE→E1+E2 E.val:=E1.val+E2.valE1+E2Evalvalval編輯ppt句子realid1,id2,id3的帶注釋的語法樹的依賴圖id1L,id2L,id3LrealTD4type5in6-addtype(id.entry,L.in)7in8addtype9in10

addtype1entry2entry3entry產生式 語義規(guī)則D→TLL.in:=T.typeT→int T.type:=integerT→realT.type:=realL→L1,idL1.in:=L.inaddtype(id.entry,L.in)L→id addtype(id.entry,L.in)編輯ppt良定義的屬性文法如果一屬性文法不存在屬性之間的循環(huán)依賴關系,那么稱該文法為良定義的

編輯ppt屬性的計算次序一個依賴圖的任何拓撲排序都給出一個語法樹中結點的語義規(guī)則計算的有效順序屬性文法說明的翻譯是很精確的基礎文法用于建立輸入符號串的語法分析樹根據(jù)語義規(guī)則建立依賴圖從依賴圖的拓撲排序中,我們可以得到計算語義規(guī)則的順序。用這個順序計算語義規(guī)則就得到輸入串的翻譯輸入串語法樹依賴圖語義規(guī)則計算次序拓撲序:一個有向非循環(huán)圖的拓撲排序是圖中結點的任何順序m1,m2,……,mk,使得邊必須是從序列中前面的結點指向后面的結點。編輯ppt句子realid1,id2,id3的帶注釋的語法樹的依賴圖id1L,id2L,id3LrealTD4type5in67in89in101entry2entry3entrya4:=real;a5:=a4addtype(id3.entry,a5);a7:=a5;addtype(id2.entry,a7);a9:=a7addtype(id1.entry,a9);編輯ppt6.2基于屬性文法的的處理方法

依賴圖樹遍歷一遍掃描編輯ppt6.2.2樹遍歷的屬性計算方法通過樹遍歷的方法計算屬性的值假設語法樹已建立,且樹中已帶有開始符號的繼承屬性和終結符的綜合屬性以某種次序遍歷語法樹,直至計算出所有屬性深度優(yōu)先,從左到右的遍歷編輯ppt

產生式 語義規(guī)則

S→XYZ Z.h:=S.a X.c:=Z.g S.b:=X.d-2 Y.e:=S.b X→x X.d:=2*X.c Y→y Y.f:=Y.e*3 Z→z Z.g:=Z.h+1例考慮屬性的文法G。其中,S有繼承屬性a,綜合屬性b;X有繼承屬性c、綜合屬性d;Y有繼承屬性e、綜合屬性f;Z有繼承屬性h、綜合屬性g編輯ppt假設S.a的初始值為0,輸入串為xyzS:a=0XYZxyzZ:h=0g=1X:c=1d=2S:a=0,b=0Y:e=0f=0產生式 語義規(guī)則

S→XYZZ.h:=S.aX.c:=Z.gS.b:=X.d-2Y.e:=S.bX→xX.d:=2*X.cY→yY.f:=Y.e*3Z→zZ.g:=Z.h+1編輯ppt6.2基于屬性文法的的處理方法

依賴圖樹遍歷一遍掃描編輯ppt6.2.3一遍掃描的處理方法一遍掃描的處理方法是在語法分析的同時計算屬性值一遍掃描的處理方法與語法分析器相互作用,它與以下兩個因素密切相關:所采用的語法分析方法屬性的計算次序L-屬性文法適合于一遍掃描的自上而下分析S-屬性文法適合于一遍掃描的自下而上分析編輯ppt按照一遍掃描的編譯程序模型理解語法制導翻譯法語法制導翻譯法:為文法中每個產生式配上一組語義規(guī)則,并且在語法分析的同時執(zhí)行這些語義規(guī)則語義規(guī)則被計算的時機在自上而下語法分析中,一個產生式匹配輸入串成功時在自下而上分析中,當一個產生式被用于進行歸約時編輯ppt一遍掃描的處理方法一遍掃描的處理方法是在語法分析的同時計算屬性值所采用的語法分析方法屬性的計算次序L-屬性文法適合于一遍掃描的自上而下分析S-屬性文法適合于一遍掃描的自下而上分析編輯ppt6.3S-屬性文法的自下而上計算S-屬性文法:只含有綜合屬性綜合屬性可以在分析輸入符號串的同時由自下而上的分析器來計算。分析器可以保存與棧中文法符號有關的綜合屬性值,每當進行歸約時,新的屬性值就由棧中正在歸約的產生式右邊符號的屬性值來計算。編輯ppt在分析棧中使用一個附加的域來存放綜合屬性值假設語義規(guī)則A.a:=f(X.x,Y.y,Z.z)是對應于產生式A→XYZ的6.3S-屬性文法的自下而上計算編輯ppt 產生式 代碼段

L→En print(val[top]) E→E1+T val[ntop]:=val[top-2]+val[top] E→T T→T1*F val[ntop]:=val[top-2]*val[top] T→F F→(E) val[ntop]:=val[top-1] F→digit

產生式語義規(guī)則

L→Enprint(E.val)E→E1+TE.val:=E1.val+T.valE→TE.val:=T.valT→T1*FT.val:=T1.val*F.valT→F T.val:=F.valF→(E)F.val:=E.valF→digitF.val:=digit.lexval編輯ppt 產生式 代碼段

(0)L→En print(val[top])(1)E→E1+T val[ntop]:=val[top-2]+val[top](2)E→T (3)T→T1*F val[ntop]:=val[top-2]*val[top](4)T→F (5)F→(E) val[ntop]:=val[top-1](6)F→digit 編輯ppt輸入 state sym val 用到的產生式3*5+4n0 # - *5+4n05 #3 -3 *5+4n03 #F -3 F→digit*5+4n02 #T -3 T→F5+4n027 #T* -3- +4n0275 #T*5 -3-5 產生式 代碼段

(0)L→En print(val[top])(1)E→E1+T val[ntop]:=val[top-2]+val[top](2)E→T (3)T→T1*F val[ntop]:=val[top-2]*val[top](4)T→F (5)F→(E) val[ntop]:=val[top-1](6)F→digit 編輯ppt輸入 state sym val 用到的產生式+4n0275 #T*5 -3-5 +4n02710 #T*F -3-5 F→digit+4n02 #T -15 T→T*F+4n01 #E -15 E→T4n016 #E+ -15- n0165 #E+4 -15-4 產生式 代碼段

(0)L→En print(val[top])(1)E→E1+T val[ntop]:=val[top-2]+val[top](2)E→T (3)T→T1*F val[ntop]:=val[top-2]*val[top](4)T→F (5)F→(E) val[ntop]:=val[top-1](6)F→digit 編輯ppt輸入 state symval 用到的產生式n0165 #E+4 -15-4 n0163#E+F -15-4 F→digitn0169#E+T -15-4 T→Fn01 #E-19 E→E+T #En -19- #L -19 L→En 產生式 代碼段

(0)L→En print(val[top])(1)E→E1+T val[ntop]:=val[top-2]+val[top](2)E→T (3)T→T1*F val[ntop]:=val[top-2]*val[top](4)T→F (5)F→(E) val[ntop]:=val[top-1](6)F→digit 編輯ppt第六章屬性文法和語法制導翻譯屬性文法基于屬性文法的處理方法S-屬性文法的自下而上計算L-屬性文法和自頂向下的翻譯編輯ppt一遍掃描的處理方法一遍掃描的處理方法是在語法分析的同時計算屬性值所采用的語法分析方法屬性的計算次序S-屬性文法適合于一遍掃描的自下而上分析

L-屬性文法適合于一遍掃描的自上而下分析編輯ppt6.4L-屬性文法和自頂向下翻譯通過深度優(yōu)先的方法對語法樹進行遍歷,從而計算屬性文法的所有屬性值。L-屬性文法允許一次遍歷就計算出所有屬性值LL(1):自上而下分析方法,深度優(yōu)先建立語法樹我們可以在自上而下語法分析的同時實現(xiàn)L屬性文法的計算編輯ppt一個屬性文法稱為L-屬性文法,如果對于每個產生式A→X1X2…Xn,其每個語義規(guī)則中的每個屬性或者是綜合屬性,或者是Xj(1jn)的一個繼承屬性且這個繼承屬性僅依賴于:(1)產生式Xj的左邊符號X1,X2,…,Xj-1的屬性;(2)A的繼承屬性。S-屬性文法一定是L-屬性文法

L-屬性文法編輯ppt非L-屬性文法例子 產生式 語義規(guī)則 A→LM L.i:=l(A.i) M.i:=m(L.s) A→QR R.i:=r(A.i) Q.i:=q(R.s)

A.s:=f(Q.s)編輯ppt6.4.1翻譯模式語義規(guī)則:給出了屬性計算的定義,沒有屬性計算的次序等實現(xiàn)細節(jié)翻譯模式:給出了使用語義規(guī)則進行計算的次序,這樣就可把某些實現(xiàn)細節(jié)表示出來在翻譯模式中,和文法符號相關的屬性和語義規(guī)則(這里我們也稱語義動作),用花括號{}括起來,插入到產生式右部的合適位置上產生式語義規(guī)則

E→TRR→addopTR1|

print(addop.lexeme)T→numprint(num.val)

E→TRR→addopT{print(addop.lexeme)}R1|

T→num{print(num.val)}編輯ppt翻譯模式示例:它把帶加號和減號的中綴表達式翻譯成相應的后綴表達式

E→TRR→addopT{print(addop.lexeme)}R1|

T→num{print(num.val)}例:9-5+2-ETR9{print(‘9’)}TR5{print(‘5’)}{print(‘-’)}+T2{print(‘2’)}R{print(‘+’)}編輯ppt設計翻譯模式的原則設計翻譯模式時,必須保證當某個動作引用一個屬性時它必須是有定義的。L-屬性文法本身就能確保每個動作不會引用尚未計算出來的屬性。編輯ppt如何將屬性文法改造成翻譯模式?將屬性文法改造成翻譯模式實際上是把語義規(guī)則用{}括起來,放在正確的位置編輯ppt建立翻譯模式當只需要綜合屬性時:為每一個語義規(guī)則建立一個包含賦值的動作,并把這個動作放在相應的產生式右邊的末尾產生式 語義規(guī)則

T→T1*F T.val:=T1.val×F.val 建立產生式和語義動作:

T→T1*F {T.val:=T1.val×F.val}編輯ppt建立翻譯模式如果既有綜合屬性又有繼承屬性,在建立翻譯模式時就必須保證:1.產生式右邊的符號的繼承屬性必須在這個符號以前的動作中計算出來。2.一個動作不能引用這個動作右邊的符號的綜合屬性。3.產生式左邊非終結符的綜合屬性只有在它所引用的所有屬性都計算出來以后才能計算。計算這種屬性的動作通常可放在產生式右端的末尾。

S→A1A2 {A1.in:=1;A2.in:=2} A→a {print(A.in)}編輯ppt建立翻譯模式

S→A1A2 {A1.in:=1;A2.in:=2} A→a {print(A.in)}不滿足第1條:產生式右邊的符號的繼承屬性必須在這個符號以前的動作中計算出來修改如下:S→{A1.in:=1;}A1{A2.in:=2}A2

A→a {print(A.in)}編輯ppt排版軟件TeX、LaTeXThequadraticformulais:${-b\pm\sqrt{b^2-4ac}\over{2a}}$Thequadraticformulais:編輯ppt基于數(shù)學格式語言EQN給定輸入 Esubn.valEQN 語言把E,n和.val分別按不同的大小放在相關的位置上En.val編輯ppt識別輸入并進行格式安放的L-屬性文法 產生式語義規(guī)則

S→B B.ps:=10 S.ht:=B.ht

B→B1B2 B1.ps:=B.ps B2.ps:=B.ps B.ht:=max(B1.ht,B2.ht)

B→B1subB2 B1.ps:=B.ps B2.ps:=shrink(B.ps) B.ht:=disp(B1.ht,B2.ht) B→text B.ht:=text.h×B.psEn.valEsubn.val編輯ppt翻譯模式

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:=shrink(B.ps)} B2{B.ht:=disp(B1.ht,B2.ht)}B→ text{B.ht:=text.h×B.ps}1.產生式右邊的符號的繼承屬性必須在這個符號以前的動作中計算出來。2.一個動作不能引用這個動作右邊的符號的綜合屬性。3.產生式左邊非終結符的綜合屬性只有在它所引用的所有屬性都計算出來以后才能計算。計算這種屬性的動作通常放在產生式右端的末尾。編輯ppt剛剛講的翻譯模式中有很多時候把語義規(guī)則放在產生式的中間,我們能不能建立一種翻譯模式,把所有的語義動作都放在產生式的末尾呢?編輯ppt從翻譯模式中去掉嵌入在產生式中間的動作把所有的語義動作都放在產生式的末尾語義動作的執(zhí)行時機統(tǒng)一轉換方法

加入新的產生式M→把嵌入在產生式中的每個語義動作用不同的標記非終結符 M代替,并把這個動作放在產生式M→的末尾建立翻譯模式編輯ppt翻譯模式E→TRR→+T{print(‘+’)}R|-T{print(‘-’)}R|T→num{print(num.val)}轉換為:E→TRR→+TMR|-TNR|M→{print(‘+’)}N→{print(‘-’)}T→num{print(num.val)}編輯ppt第六章屬性文法和語法制導翻譯屬性文法基于屬性文法的處理方法S-屬性文法的自下而上計算L-屬性文法和自頂向下的翻譯編輯ppt6.4.2自頂向下翻譯為了構造不帶回溯的自頂向下語法分析,必須消除文法中的左遞歸當消除一個翻譯模式的基本文法的左遞歸時同時考慮屬性——適合帶綜合屬性的翻譯模式動作是在處于相同位置上的符號被展開(匹配成功)時執(zhí)行的。編輯ppt自頂向下翻譯關于算術表達式的左遞歸文法相應的翻譯模式

E→E1+T {E.val:=E1.val+T.val} E→E1-T {E.val:=E1.val-T.val} E→T {E.val:=T.val} T→(E) {T.val:=E.val} T→num {T.val:=num.val}E→TRR→+TR1R→-TR1R→T→(E)T→num編輯ppt消除左遞歸,構造新的翻譯模式

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 {R1.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}E→TRR→+TR1R→-TR1R→T→(E)T→numR.i:R前面子表達式的值R.s:分析完R時子表達式的值編輯ppt計算表達式9-5+2ETRnumnum.val=9T.val=9R.i=9-TRnumnum.val=5T.val=5R.i=4+TRnumnum.val=2T.val=2R.i=6R.s=6R.s=6R.s=6E.val=6E→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 {R1.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}編輯ppt一般方法假設有翻譯模式:

A→A1Y {A.a:=g(A1.a,Y.y)

}A→X {A.a:=f(X.x)} 它的每個文法符號都有一個綜合屬性,用小寫字母表示,g和f是任意函數(shù)。消除左遞歸:

A→XRR→YR|

翻譯模式變?yōu)椋?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}R.i:R前面子表達式的值R.s:分析完R時子表達式的值編輯pptXAA.a=f(X.x)Y1AA.a=g(f(X.x),Y1.y)Y2AA.a=g(g(f(X.x),Y1.y),Y2.y)A→A1Y {A.a:=g(A1.a,Y.y)}A→X {A.a:=f(X.x)}句型XYY的翻譯過程——依據(jù)沒消除左遞歸的翻譯模式自底向上翻譯編輯ppt句型XYY的翻譯過程——依據(jù)消除左遞歸的翻譯模式自頂向下翻譯AXRR.i=f(X.x)Y1RR.i=g(f(X.x),Y1.y)Y2RR.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),Y2.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}編輯ppt作業(yè)P203----3,7編輯ppt6.4.3遞歸下降翻譯器的設計介紹如何在遞歸下降分析中實現(xiàn)翻譯模式,構造遞歸下降翻譯器(這部分內容自學)編輯ppt設計遞歸下降翻譯器的方法1.對每個非終結符A構造一個函數(shù)過程,對A的每個繼承屬性設置一個形式參數(shù)函數(shù)的返回值為A的綜合屬性(作為記錄,或指向記錄的一個指針,記錄中有若干域,每個屬性對應一個域)。為了簡單,我們假設每個非終結只有一個綜合屬性A對應的函數(shù)過程中,為出現(xiàn)在A的產生式中的每一個文法符號的每一個屬性都設置一個局部變量。2.非終結符A對應的函數(shù)過程中,根據(jù)當前的輸入符號決定使用哪個產生式候選。編輯ppt設計遞歸下降翻譯器的方法3.每個產生式對應的程序代碼中,按照從左到右的次序,對于單詞符號(終結符)、非終結符和語義動作分別作以下工作:i)對于帶有綜合屬性x的終結符X,把x的值存入為X.x設置的變量中。然后產生一個匹配X的調用,并繼續(xù)讀入一個輸入符號。ii)對于每個非終結符B,產生一個右邊帶有函數(shù)調用的賦值語句c=B(b1,b2,…,bk),其中,b1,b2,…,bk是為B的繼承屬性設置的變量,c是為B的綜合屬性設置的變量。iii)對于語義動作,把動作的代碼抄進分析器中,用代表屬性的變量來代替對屬性的每一

溫馨提示

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

評論

0/150

提交評論