版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、課程名稱第七章語法制導翻譯和中間代碼生成第七章語法制導翻譯和中間代碼生成7.1概述7.2屬性文法和語法制導翻譯7.3語義分析7.4中間代碼7.5一些語句的翻譯第七章第七章 語法制導翻譯和中間代碼生成(語法制導翻譯和中間代碼生成(1 1)課程名稱概述概述 語義處理語義處理程序設計程序設計 語言的語義語言的語義 靜態(tài)語義是對程序約束的描述,這些約束無法通過抽象語法規(guī)則來妥善靜態(tài)語義是對程序約束的描述,這些約束無法通過抽象語法規(guī)則來妥善地描述,實質上就是語法規(guī)則的良形式條件,它可以分為類型規(guī)則和作地描述,實質上就是語法規(guī)則的良形式條件,它可以分為類型規(guī)則和作用域用域/ /可見性規(guī)則兩大類可見性規(guī)則兩
2、大類 類型相容性類型相容性 變量先聲明后引用變量先聲明后引用 名稱相名稱相關要求關要求 動態(tài)語義動態(tài)語義 程序單位描述的計算程序單位描述的計算編譯程序的語義處理工作編譯程序的語義處理工作 靜態(tài)語義審查靜態(tài)語義審查 解釋執(zhí)行動態(tài)語義(計算)解釋執(zhí)行動態(tài)語義(計算)生成代碼生成代碼.語語 法法 分分 析析 后后 的的 源源 程程 序序 語義處理語義處理第七章第七章 語法制導翻譯和中間代碼生成(語法制導翻譯和中間代碼生成(2 2)課程名稱概述語義形式化語義形式化 語義建模語義建模 文法模型文法模型- - 屬性文法屬性文法 命令式或操作式模型命令式或操作式模型 - - 操作語義學操作語義學 應用式模型
3、應用式模型-指稱語義學指稱語義學 公理式模型公理式模型-公理語義學公理語義學第七章第七章 語法制導翻譯和中間代碼生成(語法制導翻譯和中間代碼生成(3 3)課程名稱屬性文法屬性文法表達式文法 ET+T| T or T Tn | b ET1 + T2 T1.type = int T2.type= T1.type E.type :=int E T1 or T2 T1.type = bool T2.type= T1.type E.type :=bool T n T.type := int T b T.type := bool 第七章第七章 語法制導翻譯和中間代碼生成(語法制導翻譯和中間代碼生成(4 4
4、)課程名稱 操作語義操作語義 描述一段程序的含義是通過執(zhí)行該段程序所改變的計算機(虛擬描述一段程序的含義是通過執(zhí)行該段程序所改變的計算機(虛擬計算機)狀態(tài)來反映。這個計算機的狀態(tài)與程序執(zhí)行時的狀態(tài)相對計算機)狀態(tài)來反映。這個計算機的狀態(tài)與程序執(zhí)行時的狀態(tài)相對應:包括變量的所有值,可執(zhí)行程序本身,各種系統(tǒng)定義的內部數應:包括變量的所有值,可執(zhí)行程序本身,各種系統(tǒng)定義的內部數據結構。計算機里所有的寄存器的值和存儲單元的值作為計算機的據結構。計算機里所有的寄存器的值和存儲單元的值作為計算機的狀態(tài),用一組形式定義的操作來說明執(zhí)行一條指令相應的狀態(tài)怎樣狀態(tài),用一組形式定義的操作來說明執(zhí)行一條指令相應的狀
5、態(tài)怎樣變化。變化。For (expr1;expr2;expr3) expr1; . Loop:if expr2=0 goto out expr3; goto loop out: .第七章第七章 語法制導翻譯和中間代碼生成(語法制導翻譯和中間代碼生成(5 5)課程名稱公理語義公理語義一個語言的每個語法成分的含義定義為公理和演繹規(guī)則,用于推導出該成一個語言的每個語法成分的含義定義為公理和演繹規(guī)則,用于推導出該成分執(zhí)行的效果。分執(zhí)行的效果。公理語義概念是隨著程序正確性的證明而發(fā)展的。當正確性證明能構造時公理語義概念是隨著程序正確性的證明而發(fā)展的。當正確性證明能構造時表明程序執(zhí)行它的規(guī)格說明所描述的計
6、算。在一個證明中,每一個語句表明程序執(zhí)行它的規(guī)格說明所描述的計算。在一個證明中,每一個語句之前之后都有一個邏輯表達式對程序的變量進行約束之前之后都有一個邏輯表達式對程序的變量進行約束, ,以此說明這個語以此說明這個語句的含義。句的含義。 一般的記號一般的記號 P S Q P S Q 如果在語句如果在語句S S執(zhí)行前執(zhí)行前P P為真,則在語句為真,則在語句S S執(zhí)行并終止后執(zhí)行并終止后Q Q為真。為真。 第七章第七章 語法制導翻譯和中間代碼生成(語法制導翻譯和中間代碼生成(6 6)課程名稱 演繹規(guī)則的例子 規(guī)則 前驅 后繼 賦值:x:=expr P(expr)x:=exprP(x) While:
7、 P B S P P while B do S end P (not B) if-then-else B P S1 Q, (not B) P S2 Q P if B then S1 else S2Q 第七章第七章 語法制導翻譯和中間代碼生成(語法制導翻譯和中間代碼生成(7 7)課程名稱指稱語義指稱語義指稱語義的基本概念是給每一段程序實體定義一個數學意義上的指稱語義的基本概念是給每一段程序實體定義一個數學意義上的對象,和一個從實體實例向數學意義對象的映射的函數對象,和一個從實體實例向數學意義對象的映射的函數特點:特點: 不但對全部程序賦予全文而且對程序設計語法不但對全部程序賦予全文而且對程序設計
8、語法 每一個語法成分短語(表達式,命令,聲明每一個語法成分短語(表達式,命令,聲明) 都都給予含義。給予含義。 每一個語法成分(短語)的含義是以它的自每一個語法成分(短語)的含義是以它的自 成分的含義的術語來定義的。成分的含義的術語來定義的。 即即 語義結構語義結構 平行于語法結構。平行于語法結構。語義函數:語義函數: 程序設計語言的語義利用映射函數來證程序設計語言的語義利用映射函數來證 明。明。 語義函數將短語映射到它的指稱。語義函數將短語映射到它的指稱。第七章第七章 語法制導翻譯和中間代碼生成(語法制導翻譯和中間代碼生成(8 8)課程名稱 例:例: 二進制數語言 110或10101 語法實
9、體 指稱(自然數) 6 或 21 語義實體 二進制數文法 Numeral:=0 :=1 := Numeral 0 :=Numeral 1 自然數 Natrual=0,1,2,3, 語義函數 Valuation:NumeralNatural第七章第七章 語法制導翻譯和中間代碼生成(語法制導翻譯和中間代碼生成(9 9)課程名稱 Valuation101 表示把Valuation施用于101 ValuationN - 把它施用于N 定義定義: Valuation(用四個方程)因為有四個形式numeral Valuation0 0 Valuation1 1 ValuationN0 2Valuation
10、 N ValuationN1 2Valuation N+1 所以:所以: Valuation110=2 Valuation11 = 2 (2 Valuation1+1) =2 (2 1+1) =6第七章第七章 語法制導翻譯和中間代碼生成(語法制導翻譯和中間代碼生成(1010)課程名稱屬性文法和語法制導翻譯屬性文法和語法制導翻譯 雖然形式語義學雖然形式語義學( (如指稱語義學、公理語義學、如指稱語義學、公理語義學、操作語義學等操作語義學等) )的研究已取得了許多重大的進展,的研究已取得了許多重大的進展,但目前在實際應用中比較流行的語義描述和語義但目前在實際應用中比較流行的語義描述和語義處理的方法
11、主要還是屬性文法和語法制導翻譯方處理的方法主要還是屬性文法和語法制導翻譯方法法 第七章第七章 語法制導翻譯和中間代碼生成(語法制導翻譯和中間代碼生成(1111)課程名稱屬性文法屬性文法屬性文法屬性文法(attribute grammar)(attribute grammar)是一個三元組是一個三元組:A=(G,V,F),:A=(G,V,F),其中其中 G:G:是一個上下文無關文法是一個上下文無關文法V:V:有窮的屬性集有窮的屬性集, ,每個屬性與文法的一個終結符或非終結每個屬性與文法的一個終結符或非終結符相連符相連, ,這些屬性代表與文法符號相關信息,如它的類這些屬性代表與文法符號相關信息,如
12、它的類型、值、代碼序列、符號表內容等等型、值、代碼序列、符號表內容等等 . .屬性與變量一樣,屬性與變量一樣,可以進行計算和傳遞。屬性加工的過程即是語義處理的可以進行計算和傳遞。屬性加工的過程即是語義處理的過程。過程。F:F:關于屬性的屬性斷言或一組屬性的計算規(guī)則關于屬性的屬性斷言或一組屬性的計算規(guī)則( (稱為語義稱為語義規(guī)則規(guī)則) . ) . 斷言或語義規(guī)則與一個產生式相聯斷言或語義規(guī)則與一個產生式相聯, ,只引用該只引用該產生式左端或右端的終結符或非終結符相聯的屬性產生式左端或右端的終結符或非終結符相聯的屬性. . 第七章第七章 語法制導翻譯和中間代碼生成(語法制導翻譯和中間代碼生成(12
13、12)課程名稱屬性有兩種屬性有兩種 繼承的和綜合的屬性繼承的和綜合的屬性 屬性通常分為兩類:綜合屬性和繼承屬性。簡單地說,綜合屬性用屬性通常分為兩類:綜合屬性和繼承屬性。簡單地說,綜合屬性用于于“自下而上自下而上”傳遞信息,而繼承屬性用于傳遞信息,而繼承屬性用于“自上而下自上而下”傳遞信息。傳遞信息。 出現在產生式左邊的繼承屬性和出現在產生式右邊的綜合屬性不出現在產生式左邊的繼承屬性和出現在產生式右邊的綜合屬性不由所給定的產生式的屬性計算規(guī)則進行計算,它們由其它產生式的由所給定的產生式的屬性計算規(guī)則進行計算,它們由其它產生式的屬性規(guī)則計算或者由生計算器的參數提供屬性規(guī)則計算或者由生計算器的參數
14、提供。 AX1 X2 XnA的綜合屬性,計算 S(A):=f(I(X1),I(Xn)Xj的繼承屬性,計算 T(Xj):=f(I(A),. I(Xn) 1)非終結符既可有綜合屬性也可有繼承屬性,但文法開始符號沒有繼承屬性. 2)終結符只有綜合屬性.第七章第七章 語法制導翻譯和中間代碼生成(語法制導翻譯和中間代碼生成(1313)課程名稱 在一個屬性文法中,對應于每個產生式在一個屬性文法中,對應于每個產生式A A都有一套與之相關聯的語都有一套與之相關聯的語義規(guī)則,每條規(guī)則的形式為義規(guī)則,每條規(guī)則的形式為b:=f(cb:=f(c1 1,c,c2 2c ck k) )這里,這里,f f是一個函數,而且或
15、者是一個函數,而且或者(1 1)b b是是A A的一個綜合屬性并且的一個綜合屬性并且c c1 1,c,c2 2c ck k是產生式右邊文法符號的屬性是產生式右邊文法符號的屬性; ;或者或者(2 2)b b是產生式右邊某個文法符號的一個繼承屬性并且是產生式右邊某個文法符號的一個繼承屬性并且c c1 1,c,c2 2c ck k是是A A或或產生式右邊任何文法符號的屬性。產生式右邊任何文法符號的屬性。在兩種情況下,我們都說屬性在兩種情況下,我們都說屬性b b依賴于屬性依賴于屬性c c1 1,c,c2 2c ck k 。第七章第七章 語法制導翻譯和中間代碼生成(語法制導翻譯和中間代碼生成(1414)
16、課程名稱 一個屬性文法的例子一個屬性文法的例子 例例7.17.1 非終結符非終結符E E、T T及及F F都有一個綜合屬性都有一個綜合屬性valval, ,符號符號digitdigit有一個綜合屬性,它的有一個綜合屬性,它的值由詞法分析器提供。與產生式值由詞法分析器提供。與產生式LEnLEn對應的語義規(guī)則僅僅是打印由對應的語義規(guī)則僅僅是打印由E E產生的產生的算術表達式的值的一個過程,我們可認為這條規(guī)則定義了算術表達式的值的一個過程,我們可認為這條規(guī)則定義了L L的一個虛屬性。某的一個虛屬性。某些非終結符加下標是為了區(qū)分一個產生式中同一非終結符多次出現些非終結符加下標是為了區(qū)分一個產生式中同一
17、非終結符多次出現語 義 規(guī) 則 L EE E1+TE TT T1 * FT FF (E)F digitPrint(E.val) E.val:=E1.val+T.val E.val:=T.val T.val:=T1.val F.val T.val:=F.valF.val:=E.valF.val:=digit.lexval產 生 式第七章第七章 語法制導翻譯和中間代碼生成(語法制導翻譯和中間代碼生成(1515)課程名稱設表達式為設表達式為3 35+45+4,則,則語義動作語義動作打印數值打印數值1919.LE.val=19E.val=15T.val=4T.val=15F.val=4T.val=3F
18、.val=3F.val=5digit.lexval=4digit.lexval=5digit.lexval=3+*3*5+4的帶注釋的分析樹的帶注釋的分析樹第七章第七章 語法制導翻譯和中間代碼生成(語法制導翻譯和中間代碼生成(1616)課程名稱繼承屬性繼承屬性一個結點的繼承屬性值是由此結點的父結點和一個結點的繼承屬性值是由此結點的父結點和/ /或兄弟結點的某些或兄弟結點的某些屬性來決定的。屬性來決定的。例7.2 繼承屬性繼承屬性L.in生 產 式語 義 規(guī) 則D TL T int T real L L1,idL idL.in:=T.typeT.type=integerT.type:=real
19、L1.in:=L.in addtype(id.entry,L.in) addtype(id.entry,L.in)第七章第七章 語法制導翻譯和中間代碼生成(語法制導翻譯和中間代碼生成(1717)課程名稱 DL.in= realL.in= realL.in= realT.type=realrealid2id1id3.Real id1,id2,id3,第七章第七章 語法制導翻譯和中間代碼生成(語法制導翻譯和中間代碼生成(1818)課程名稱例例7.37.3P DSD var V; D | S V := E; S | V x | y | z現在使用兩個屬性,現在使用兩個屬性,name和和dl,每當一個
20、新的變量聲明時,就把它的,每當一個新的變量聲明時,就把它的name屬性附屬性附給它,給它,name屬性是綜合屬性。屬性是綜合屬性。將所聲明的變量都放到一個變量名字清單中(用語義函數將所聲明的變量都放到一個變量名字清單中(用語義函數addlist實現),用屬性實現),用屬性dl綜合聲明塊中聲明的所有變量。然后這個綜合聲明塊中聲明的所有變量。然后這個dl屬性又作為繼承屬性傳到后面的語句屬性又作為繼承屬性傳到后面的語句部分,每個語句用到的變量都要進行審查,看它是否在變量名字清單中部分,每個語句用到的變量都要進行審查,看它是否在變量名字清單中 P DS S.dl = D.dlD1 var V; D2
21、| D1.dl = addlist(V.name, D2.dl) | D1.dl = NULLS1 V := E; S2 | check(V.name, S1.dl); S2.dl = S1.dlV x | y | z V.name = x | V.name = y | V.name = z第七章第七章 語法制導翻譯和中間代碼生成(語法制導翻譯和中間代碼生成(1919)課程名稱var x;var y;x:=e; P D dl=x,y S dl=x,yvar V ; D dl=y V := e ; S x var V ; D dl= y y 第七章第七章 語法制導翻譯和中間代碼生成(語法制導翻譯
22、和中間代碼生成(2020)課程名稱語法制導的翻譯語法制導的翻譯 一個翻譯是符號串對的一個集合。在一個編譯程序定義的翻譯中,符號串對是源程序和目標程序。各個編譯階段定義一個翻譯,詞法分析:(字符串,單詞串)語法分析:(單詞串,語法樹)代碼生成(語法樹,匯編語言) 設是輸入字母表且是輸出字母表。定義由語言 L1 *到語言L2 *的一個翻譯是由*到 *的一個關系T,使得T的定義域為L1且T的值域為L2 。 使(x,y) T的句子y叫做x的一個輸出.第七章第七章 語法制導翻譯和中間代碼生成(語法制導翻譯和中間代碼生成(2121)課程名稱語法制導的翻譯語法制導的翻譯 直觀地說,一個語法制導翻譯的基礎是一
23、個文法,其中翻譯成分依附在直觀地說,一個語法制導翻譯的基礎是一個文法,其中翻譯成分依附在每一產生式上。每一產生式上。例例7.47.4: 下列翻譯模式,它定義翻譯,即對每個輸入下列翻譯模式,它定義翻譯,即對每個輸入x x,其輸出,其輸出y y是是x x的的逆轉。定義此翻譯的規(guī)則是逆轉。定義此翻譯的規(guī)則是 產生式產生式 翻譯規(guī)則翻譯規(guī)則 (1)s0s(2)s1s (3)s (1)s=s0(2)s=s1 (3)s= 第七章第七章 語法制導翻譯和中間代碼生成(語法制導翻譯和中間代碼生成(2222)課程名稱 輸入輸出對可由(,)表示,其中是輸入句子形式而是輸出句子形式。 (S,S)開始用產生式s0s來擴
24、展得到(0S,S0). 再用一次規(guī)則(1),得到(00S,S00)。 再用規(guī)則(2),就得到(001S,S100). 然后應用規(guī)則(3)并得到(001,100)。第七章第七章 語法制導翻譯和中間代碼生成(語法制導翻譯和中間代碼生成(2323)課程名稱 例例7.57.5: 把下述產生式定義的算術表達式映射到后綴波蘭表示:把下述產生式定義的算術表達式映射到后綴波蘭表示: EE+T E T T TF T F F (E) F a E=ET+ E=T T=TF T=F F=E F=a 產生式 翻譯規(guī)則翻譯規(guī)則第七章第七章 語法制導翻譯和中間代碼生成(語法制導翻譯和中間代碼生成(2424)課程名稱確定輸入
25、a+aa的輸出: (E,E)(E+T,ET+) (T+T,TT+) (F+T,FT+) (a+T,aT+) (a+TF,aFF+) (a+FF,aFF+) (a+aF,aaF+) (a+aa,aaa+)第七章第七章 語法制導翻譯和中間代碼生成(語法制導翻譯和中間代碼生成(2525)課程名稱 定義:定義: 一個語法制導的翻譯模式是一個五元組一個語法制導的翻譯模式是一個五元組T=(N, , , R,S),其中其中 (1) N是非終結符的有限集。是非終結符的有限集。 (2) 是有限的輸入字母表。是有限的輸入字母表。 (3) 是有限的輸出字母表。是有限的輸出字母表。 (4) R是形如是形如A, 的規(guī)則
26、的有限集的規(guī)則的有限集,其中其中 (N )*, (N )*且且 中那組非終結符是中那組非終結符是 中中那組非終結符那組非終結符的置換。的置換。 (5) S是是N中一個特別的非終結符,即開始符。中一個特別的非終結符,即開始符。第七章第七章 語法制導翻譯和中間代碼生成(語法制導翻譯和中間代碼生成(2626)課程名稱 定義:定義: 若若T= (N,T= (N, , , , , R,S) R,S)是是SDTS,SDTS, (T)(T)則稱為語法制導的翻則稱為語法制導的翻譯譯(SDT)(SDT),文法,文法GiGi=(N,=(N, ,P,S) ,P,S),其中,其中P=AP=A| |A A, , 屬于屬
27、于R)R),稱為稱為SDTS TSDTS T的基礎(或輸入)文法。文法的基礎(或輸入)文法。文法G G0 0=( N, =( N, ,P,P ,S),S), ,其中其中P P =A =A | | A A, , 屬于屬于R R ,稱為,稱為T T的輸出文法。的輸出文法。 把語法制導的翻譯方法看成是將輸入文法把語法制導的翻譯方法看成是將輸入文法GiGi中的推中的推導樹變換成輸出文法導樹變換成輸出文法G G0 0中的推導樹。給了輸入句子中的推導樹。給了輸入句子x x,可以按,可以按如下方式得到如下方式得到x x的一個翻譯:先為推導的一個翻譯:先為推導x x構造一棵推導樹,再構造一棵推導樹,再變換該樹
28、到輸出文法中的一棵樹,然后取此輸出樹的邊緣作變換該樹到輸出文法中的一棵樹,然后取此輸出樹的邊緣作為為x x的一個翻譯。的一個翻譯。第七章第七章 語法制導翻譯和中間代碼生成(語法制導翻譯和中間代碼生成(2727)課程名稱語義制導翻譯中的規(guī)則語義制導翻譯中的規(guī)則A A, , 對應于每一個文法產生式對應于每一個文法產生式A A 都有與之相都有與之相關聯的一套語義描述關聯的一套語義描述 屬性文法屬性文法(attribute grammar)(attribute grammar)是一個三元是一個三元組組:A=(G,V,F) :A=(G,V,F) 屬性文法可以看作是關于語言翻譯的高級規(guī)范說屬性文法可以看作
29、是關于語言翻譯的高級規(guī)范說明,其中隱去實現細節(jié),使用戶從明確說明翻明,其中隱去實現細節(jié),使用戶從明確說明翻譯順序的工作中解脫出來譯順序的工作中解脫出來第七章第七章 語法制導翻譯和中間代碼生成(語法制導翻譯和中間代碼生成(2828)課程名稱語法制導翻譯實現從概念上講,語法制導翻譯即基于屬性文法的處理過程通常是這樣的:對單詞符號串進行語法分析,構造語法分析樹,然后根據需要遍歷語法樹并在語法樹的各結點處按語義規(guī)則進行計算輸入符號串 分析樹 屬性依賴圖 語義規(guī)則的計算順序第七章第七章 語法制導翻譯和中間代碼生成(語法制導翻譯和中間代碼生成(2929)課程名稱依賴圖由稱為依賴圖的一個有向圖 描述分析樹中
30、的繼承屬性和屬性中間的相互依賴關系。 依賴圖的構造算法:依賴圖的構造算法: for分析樹中每一個結點n do for 結點的文法符號的每一個屬性a do 為a在依賴圖中建立一個結點; for 分析樹中每一個結點n do for結點n所用產生式對應的每一個語義規(guī)則 b:=f(c1,c2,ck) do for i :=1 to k do 從ci結點到b結點構造一條有向邊 第七章第七章 語法制導翻譯和中間代碼生成(語法制導翻譯和中間代碼生成(3030)課程名稱依賴圖-例7.2 例例7.2 7.2 繼承屬性繼承屬性L.inL.in生 產 式語 義 規(guī) 則D TL T int T real L L1,i
31、dL idL.in:=T.typeT.type=integerT.type:=real L1.in:=L.in addtype(id.entry,L.in) addtype(id.entry,L.in)第七章第七章 語法制導翻譯和中間代碼生成(語法制導翻譯和中間代碼生成(3131)課程名稱例7.2 Real id1,id2,id3分析樹的依賴圖 5678910T4DLLLRealtypeininin3 entry2 entryentryid3id2id1.1第七章第七章 語法制導翻譯和中間代碼生成(語法制導翻譯和中間代碼生成(3232)課程名稱 依賴圖中的結點由數字來標識。從代表T.type的
32、結點4有一條有向邊連到代表L.in的結點5,因為根據產生式ETL的語義規(guī)則L1.in=L.in,可知L1.in依賴于L.in,所以有兩條向下的有向邊分別進入結點7和9。每一個與L產生式有關的語義規(guī)則addtype(id. Entry, L.in)都產生一個虛屬性,結點 6、8和10都是為這些虛屬性構造的。第七章第七章 語法制導翻譯和中間代碼生成(語法制導翻譯和中間代碼生成(3333)課程名稱良定義的屬性文法。 很顯然,一條求值規(guī)則只有在其各變元值均已求得的情況下很顯然,一條求值規(guī)則只有在其各變元值均已求得的情況下才可以使用。但有時候可能會出現一個屬性對另一個屬性的才可以使用。但有時候可能會出現
33、一個屬性對另一個屬性的循環(huán)依賴關系。從事貿易如,循環(huán)依賴關系。從事貿易如,p p、c c1 1、c c2 2都是屬性,若有下求都是屬性,若有下求值規(guī)則:值規(guī)則:p: = fp: = f1 1(c(c1 1) )、c c1 1: = f: = f2 2(c(c2 2) )、c c2 2: = f: = f3 3(p)(p)時,就無時,就無法對法對p p求值。如果一屬性文法不存在屬性之間的循環(huán)依賴關求值。如果一屬性文法不存在屬性之間的循環(huán)依賴關系,那么稱該文法為良定義的。為了設計編譯程序,我們只系,那么稱該文法為良定義的。為了設計編譯程序,我們只處理良定義的屬性文法。處理良定義的屬性文法。 第七章
34、第七章 語法制導翻譯和中間代碼生成(語法制導翻譯和中間代碼生成(3434)課程名稱屬性的計算順序屬性的計算順序一個有向非循環(huán)圖的拓撲序是圖中結點的任何順序一個有向非循環(huán)圖的拓撲序是圖中結點的任何順序m m1 1, m, m2 2, , , m, mk k,使得,使得邊必須是從序列中前面的結點指向后面的結點。也就是說,如果邊必須是從序列中前面的結點指向后面的結點。也就是說,如果m mi immj j是是m mi i到到m mj j的一條邊,那么在序列中的一條邊,那么在序列中m mi i必須出現在必須出現在m mj j之前。之前。 一個依賴圖的任何拓撲排序都給出一個分析樹中結點的語一個依賴圖的任何
35、拓撲排序都給出一個分析樹中結點的語義規(guī)則計算的有效順序。義規(guī)則計算的有效順序。這就是說,在拓撲排序中,在一這就是說,在拓撲排序中,在一個結點,語義規(guī)則個結點,語義規(guī)則b:=f(cb:=f(c1 1,c,c2 2, ,c ck k) )中的屬性中的屬性c c1 1,c,c2 2, ,c ck k在計算在計算b b以前都是可用的。以前都是可用的。第七章第七章 語法制導翻譯和中間代碼生成(語法制導翻譯和中間代碼生成(3535)課程名稱屬性文法屬性文法說明的翻譯是很精確的。最基本的文法用于建立輸入符號串的分析樹。依賴說明的翻譯是很精確的。最基本的文法用于建立輸入符號串的分析樹。依賴圖如上面討論的那樣建
36、立。從依賴圖的拓撲排序中,我們可以得到計算語義規(guī)則的圖如上面討論的那樣建立。從依賴圖的拓撲排序中,我們可以得到計算語義規(guī)則的順序。用這個順序來計算語義規(guī)則就得到輸入符號串的翻譯。順序。用這個順序來計算語義規(guī)則就得到輸入符號串的翻譯。例例7.2Real id1,id2,id37.2Real id1,id2,id3分析樹的依賴圖分析樹的依賴圖每一條邊都是從序號較低的結點指向序號較高的結點。歷此,依賴圖的一個拓撲排序每一條邊都是從序號較低的結點指向序號較高的結點。歷此,依賴圖的一個拓撲排序可以從低序號到高序號順序寫出。從這個拓撲排序中我們可以得到下列程序,用可以從低序號到高序號順序寫出。從這個拓撲排
37、序中我們可以得到下列程序,用a an n來代表依賴圖中與序號來代表依賴圖中與序號n n的結點有關的屬性:的結點有關的屬性:a4: = reala5: = a4 addtype (id3, entry, a5); a7: = a5; addtype (id2,entry, a7)a9: = a7 addtype (id1,entry, a9)這些語義規(guī)則的計算將把這些語義規(guī)則的計算將把realreal類型填入到每個標識符對應的符號表項中。類型填入到每個標識符對應的符號表項中。第七章第七章 語法制導翻譯和中間代碼生成(語法制導翻譯和中間代碼生成(3636)課程名稱 屬性計算方法屬性計算方法樹遍歷的
38、屬性計算方法樹遍歷的屬性計算方法設語法樹已經建立起了,并且樹中已帶有開始符號的繼承屬性和終結符設語法樹已經建立起了,并且樹中已帶有開始符號的繼承屬性和終結符的綜合屬性。然后以某種次序遍歷語法樹,直至計算出所有屬性。最常的綜合屬性。然后以某種次序遍歷語法樹,直至計算出所有屬性。最常用的遍歷方法是深度優(yōu)先,從左到右的遍歷方法。如果需要的話,可使用的遍歷方法是深度優(yōu)先,從左到右的遍歷方法。如果需要的話,可使用多次遍歷(或稱遍)。用多次遍歷(或稱遍)。 一遍掃描的處理方法一遍掃描的處理方法與樹遍歷的屬性計算文法不同,一遍掃描的處理方法是在語法分析的同時計與樹遍歷的屬性計算文法不同,一遍掃描的處理方法是
39、在語法分析的同時計算屬性值,而不是語法分析構造語法樹之后進行屬性的計算,而且無無算屬性值,而不是語法分析構造語法樹之后進行屬性的計算,而且無無需構造實際的語法樹。需構造實際的語法樹。因為一遍掃描的處理方法與語法分析器的相互作用,它與下面兩個因素密切因為一遍掃描的處理方法與語法分析器的相互作用,它與下面兩個因素密切相關:相關:(1 1)所采用的語法分析方法)所采用的語法分析方法(2 2)屬性的計算次序。)屬性的計算次序。第七章第七章 語法制導翻譯和中間代碼生成(語法制導翻譯和中間代碼生成(3737)課程名稱例:定義定點二進制數的例:定義定點二進制數的CFG:CFG:(1) NSS(2) SSB(
40、3) SB(4) B0(5) B1 第七章第七章 語法制導翻譯和中間代碼生成(語法制導翻譯和中間代碼生成(3838)課程名稱 非終結符非終結符N N表示整個二進制數的數值,綜合屬表示整個二進制數的數值,綜合屬性性v v附加在附加在N N上:上:N v N v 非終結符非終結符B B 表示一個二進制數字,它有自己的表示一個二進制數字,它有自己的值值v v ,但該值分配給,但該值分配給N N的值與它的位置有關,的值與它的位置有關,是與是與2 2成比例,比例因子成比例,比例因子f f是從是從S S繼承的屬性繼承的屬性, ,所所以:以:B v f B v f 非終結符非終結符S S 表示一個二進制數字
41、串,它也有值,但該值與表示一個二進制數字串,它也有值,但該值與串的位置有關,與串的位置有關,與f f有關與串的長度有關與串的長度l l有關有關: S : S f v lf v l第七章第七章 語法制導翻譯和中間代碼生成(語法制導翻譯和中間代碼生成(3939)課程名稱構造數值的屬性斷言可以如下構造數值的屬性斷言可以如下: : N vS f1 v 1 l1 S f 2 v 2 l2 v=v1+v2; f 1 =1; f2=2-l2 S f v l S f1v1 l 1B f 2v2 f1=2f ; f 2=f; v=v 1+v2;l=l1+1 B f v l=1 B f v0 v=0 1 v=f第
42、七章第七章 語法制導翻譯和中間代碼生成(語法制導翻譯和中間代碼生成(4040)課程名稱 N v S i1 l1 “” S i2 l2 v= i1+ 2-l2 i2 S i l S i1 l 1 Bi2 i =2 i1+ i2; ;l=l1+1 B i l=1 B i “0” i =0 “1” i =1第七章第七章 語法制導翻譯和中間代碼生成(語法制導翻譯和中間代碼生成(4141)課程名稱 在某些情況下可用一遍掃描實現屬性文法的語義規(guī)則計算。也就是說在語法分析的同時完成語義規(guī)則的計算,無須明顯地構造語法樹或構造屬性之間的依賴圖。因為單遍實現對于編譯效率非常重要 具體的實現希望在單遍掃描中完成翻譯
43、具體的實現希望在單遍掃描中完成翻譯研究怎樣實現這種翻譯器。一個一般的屬性文法的翻譯器可能是很難建立的,然而有一大類屬性文法的翻譯器是很容易建立的 s-屬性屬性 適用于適用于自底向上的計算自底向上的計算 L-屬性屬性 適用于自頂向下的分析,也可用于適用于自頂向下的分析,也可用于自底向上。自底向上。 第七章第七章 語法制導翻譯和中間代碼生成(語法制導翻譯和中間代碼生成(4242)課程名稱S屬性文法的自下而上計算S屬性文法,它只含有綜合屬性。 綜合屬性可以在分析輸入符號串的同時自下而上的分析器來計算。分析器可以保存與棧中文法符號有關的綜合屬性值,每當進行歸約時,新的屬性值就由棧中正在歸約的產生式右邊
44、符號的屬性值來計算。 S屬性文法的翻譯器通常可借助于LR分析器實現。在S屬性文法的基礎上,LR分析器可以改造為一個翻譯器,在對輸入串進行語法分析的同時對屬性進行計算。第七章第七章 語法制導翻譯和中間代碼生成(語法制導翻譯和中間代碼生成(4343)課程名稱產生式 語義規(guī)則) (.)1 . 1.) . .l)1* . 1. )F . F.)()() . . )ii .:.LR分析器可以改造為一個翻譯器,在對輸入串進行語法分析的同時對屬性進行計算。 LR分析器增加語義棧增加語義棧 第七章第七章 語法制導翻譯和中間代碼生成(語法制導翻譯和中間代碼生成(4444)課程名稱 *的分析和計值過程步驟 動作
45、狀態(tài)棧 語義棧(值棧) 符號棧 余留輸入串) 3*) 3 *) *) *) *) *) *) *) *) * ) * ) ()() * #) ()() ) ()() )接受)接受 第七章第七章 語法制導翻譯和中間代碼生成(語法制導翻譯和中間代碼生成(4545)課程名稱BOTTOMBOTTOMUPUP語義處理是作類型檢查,對二目運算符的運算對象語義處理是作類型檢查,對二目運算符的運算對象進行類型匹配審查。進行類型匹配審查。(LR(LR分分析):增加語義棧析):增加語義棧 歸約歸約時進行語義動作時進行語義動作. .例7.7GE: (1) E T+TT+T(2) E (2) E T or TT or
46、 T(3) T (3) T n n(4) T (4) T b b 第七章第七章 語法制導翻譯和中間代碼生成(語法制導翻譯和中間代碼生成(4646)課程名稱E ET T1 1 + T+ T2 2 if T if T1 1. .type = type = intint and T and T2 2. .type= type= intint then E then E. .type :=type :=intint else error else error E E T T1 1 or Tor T2 2 if T if T1 1. .type = type = boolbool and T and T
47、2 2. .type= type= boolbool then E then E. .type :=type :=boolbool else error else error T T n T.type := int n T.type := int T T b T.type := bool b T.type := bool 第七章第七章 語法制導翻譯和中間代碼生成(語法制導翻譯和中間代碼生成(4747)課程名稱w =n + n# 4ninto#-2Tinto#-5+-2Tinto#-4nint5+-2Tinto#-6Tint5+-2Tinto#-1Eint0#- GE:的 LR(0)分分析析表表
48、 action GOTO 狀狀態(tài)態(tài)+ o n b # E T 0 S4 S3 1 2 1 acc 2 s5 s7 3 r4 r4 r4 r4 r4 4 r3 r3 r3 r3 r3 5 s4 s3 6 6 r1 r1 r1 r1 r1 7 s4 s3 8 8 r2 r2 r2 r2 r2 GE: (1) E T+TT+T(2) E (2) E T or TT or T(3) T (3) T n n(4) T (4) T b b第七章第七章 語法制導翻譯和中間代碼生成(語法制導翻譯和中間代碼生成(4848)課程名稱w =n +b4ninto#-2Tinto#-5+-2Tinto#-3bbool5
49、+-2Tinto#-6Tbool5+-2Tinto#-1Eerroro#-第七章第七章 語法制導翻譯和中間代碼生成(語法制導翻譯和中間代碼生成(4949)課程名稱L L屬性文法和自頂向下翻譯屬性文法和自頂向下翻譯一個屬性文法稱為一個屬性文法稱為L L屬性文法,如果對于每個產生式屬性文法,如果對于每個產生式AXAX1 1X X2 2X Xn n,其每個語義規(guī),其每個語義規(guī)則中的每個屬性或者是綜合屬性,或者是則中的每個屬性或者是綜合屬性,或者是X Xj j(1jn1jn)的一個繼承屬性且這)的一個繼承屬性且這個繼承屬性僅依賴于:個繼承屬性僅依賴于:(1 1)產生式)產生式X Xj j在左邊符號在左
50、邊符號X X1 1,X X2 2,X Xj-1j-1的屬性;的屬性;(2 2)A A的繼承屬性。的繼承屬性。S S屬性文法一定是屬性文法一定是L L屬性文法,因為(屬性文法,因為(1 1)、()、(2 2)限制只用于繼承屬性。)限制只用于繼承屬性。L L屬性文法允許一次遍歷就計算出所有屬性值。屬性文法允許一次遍歷就計算出所有屬性值。LLLL(1 1)這種自上而下分析文法的分析過程,從概念上說可以看成是深度優(yōu)先建立)這種自上而下分析文法的分析過程,從概念上說可以看成是深度優(yōu)先建立語法樹的過程,因此,我們可以在自上而下語法分析的同時實現語法樹的過程,因此,我們可以在自上而下語法分析的同時實現L L
51、屬性文法的屬性文法的計算。計算。第七章第七章 語法制導翻譯和中間代碼生成(語法制導翻譯和中間代碼生成(5050)課程名稱例(中綴表達式翻譯成相應的后綴表達式)例(中綴表達式翻譯成相應的后綴表達式)ETRETRRaddop T print(addopRaddop T print(addop. Lexeme) R. Lexeme) R1 1|Tnum print(num.valTnum print(num.val) 翻譯模式(翻譯模式(Translation schemesTranslation schemes)適合語法制導翻譯的另一種描述形)適合語法制導翻譯的另一種描述形式。翻譯模式給出了使用語
52、義規(guī)則進行計算的次序,可把某些實現細節(jié)式。翻譯模式給出了使用語義規(guī)則進行計算的次序,可把某些實現細節(jié)表示出來。在翻譯模式中,和文法符號相關的屬性和語義規(guī)則(這里我表示出來。在翻譯模式中,和文法符號相關的屬性和語義規(guī)則(這里我們也稱語義動作),用花括號括起來,插入到產生式右部的合適位們也稱語義動作),用花括號括起來,插入到產生式右部的合適位置上置上。第七章第七章 語法制導翻譯和中間代碼生成(語法制導翻譯和中間代碼生成(5151)課程名稱輸入串95 + 2的語法樹,每個語義動作都作為相應產生式左部符號的結點的兒子,按深度優(yōu)先次序執(zhí)行圖中的動作后,打印輸出952+。 ET R9 print(9) -
53、 T print(-) R 5 print(5) + T print(+) R 2 print(2) 第七章第七章 語法制導翻譯和中間代碼生成(語法制導翻譯和中間代碼生成(5252)課程名稱L L屬性文法在自頂向下分析中的實現屬性文法在自頂向下分析中的實現 帶左遞歸的文法的翻譯模式EE1 + T E.val: = E1.val + T.valEE1T E.val: = E1.valT.valET E.val: = T.valT(E) T.val: = E.valTnum T.val: = num.val第七章第七章 語法制導翻譯和中間代碼生成(語法制導翻譯和中間代碼生成(5353)課程名稱消除
54、左遞歸的同時考慮屬性,構造新的消除左遞歸的同時考慮屬性,構造新的翻譯模式翻譯模式 ETR.i: =T.val R E.val: = R.sR + T R1.i:=R.i + T.val R1 R.s: = R1.sR- T R1.i: = R.i -T.val R1 R.s: = R1.sRR.s: = R.iT(E) T.val: =E.valTnum T.val: = num.val第七章第七章 語法制導翻譯和中間代碼生成(語法制導翻譯和中間代碼生成(5454)課程名稱計算表達式計算表達式9-5+29-5+2.ER.i=9T.val=5T.val=9R.i=4 R.i=6T.val=2nu
55、m.val=9num.val=5num.val=2_+第七章第七章 語法制導翻譯和中間代碼生成(語法制導翻譯和中間代碼生成(5555)課程名稱在上頁的翻譯模式中,每個數都是由在上頁的翻譯模式中,每個數都是由T T產生的,并且產生的,并且T.valT.val的值就是的值就是由屬性由屬性num.valnum.val給出的數的詞法值。子表達式給出的數的詞法值。子表達式9 95 5中的數字中的數字9 9是由是由最左邊的最左邊的T T生成的,但是減號和生成的,但是減號和5 5是由根的右子結點是由根的右子結點R R生成的。繼生成的。繼承屬性承屬性R.iR.i從從T.valT.val得到值得到值9 9。計算
56、。計算9 95 5并把結果并把結果4 4傳遞到中間的傳遞到中間的R R結點這是通過產生式中嵌入的下面動作實現:結點這是通過產生式中嵌入的下面動作實現:RR1 1.i: = R.i.i: = R.iT.valT.val 類似的動作把類似的動作把2 2加到加到9 95 5的值上,在最下面的的值上,在最下面的R R結點處產生結果結點處產生結果R.iR.i6 6。這個結將成為根結點處。這個結將成為根結點處E.valE.val的值的值,R,R的的綜合屬性綜合屬性s s在圖中沒有在圖中沒有表示出來,它用來向上復制這一結果一直到樹根。表示出來,它用來向上復制這一結果一直到樹根。 第七章第七章 語法制導翻譯和
57、中間代碼生成(語法制導翻譯和中間代碼生成(5656)課程名稱 對于自頂向下分析,我們假設動作是在處于相同位置對于自頂向下分析,我們假設動作是在處于相同位置上的符號被展開(匹配成功)時執(zhí)行的。如圖中的第上的符號被展開(匹配成功)時執(zhí)行的。如圖中的第二個產生式中,第一個動作(對二個產生式中,第一個動作(對R R1 1.i.i賦值)是在賦值)是在T T被完被完全展開成終結符號后執(zhí)行的,第二個動作是在全展開成終結符號后執(zhí)行的,第二個動作是在R R1 1被完被完全展開成終結符號后執(zhí)行的。正如前面我們所討論的,全展開成終結符號后執(zhí)行的。正如前面我們所討論的,一個符號的繼承屬性必須由出現在這個符號之前的動一
58、個符號的繼承屬性必須由出現在這個符號之前的動作來計算,產生式左邊非終結符的綜合屬性必須在它作來計算,產生式左邊非終結符的綜合屬性必須在它所依賴的所有屬性都計算出來以后才能計算。所依賴的所有屬性都計算出來以后才能計算。第七章第七章 語法制導翻譯和中間代碼生成(語法制導翻譯和中間代碼生成(5757)課程名稱轉換左遞歸翻譯模式的方法推廣到一般轉換左遞歸翻譯模式的方法推廣到一般 假設翻譯模式假設翻譯模式1 1:AAAA1 1Y Y A.a: = g(AA.a: = g(A1 1。a, Y.y)a, Y.y)AXAX A.a: = f(X.x) A.a: = f(X.x)每個文法符號都有一個綜合屬性,用
59、相每個文法符號都有一個綜合屬性,用相應的小寫字母表示,應的小寫字母表示,g g和和f f是任意函數是任意函數 消除左遞歸,文法轉換成:消除左遞歸,文法轉換成:AXR RYRAXR RYR再考慮語義動作,翻譯模式變?yōu)樵倏紤]語義動作,翻譯模式變?yōu)? 2AXAXR.i: = f(X.x)R.i: = f(X.x) R R A.a: =R.sA.a: =R.sRYRYRR1 1.i: = g(R.i,Y.y).i: = g(R.i,Y.y) R R1 1R.s: = RR.s: = R1 1.s.sRRR.s: = R.iR.s: = R.i第七章第七章 語法制導翻譯和中間代碼生成(語法制導翻譯和中間
60、代碼生成(5858)課程名稱 翻譯模式翻譯模式1 1和翻譯模式和翻譯模式2 2的結果是一樣的??梢越o的結果是一樣的??梢越o出串出串XYXY1 1Y Y2 2兩棵帶注釋的語法樹看出來,一棵是根據兩棵帶注釋的語法樹看出來,一棵是根據翻譯模式翻譯模式1 1自下而上計算屬性的。一棵是根據翻譯自下而上計算屬性的。一棵是根據翻譯模式模式2 2自上而下計算的。自上而下計算的。第七章第七章 語法制導翻譯和中間代碼生成(語法制導翻譯和中間代碼生成(5959)課程名稱 AA1YA.a: = g(A1。a, Y.y)AX A.a: = f(X.x)A.a=g(g(f(X.x,Y1.y),Y2.y)A.a=g(f(X
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024-2025學年新疆烏魯木齊四十一中高二(上)期末數學試卷(含答案)
- 二零二五年度鋼筋采購及環(huán)保評估合同3篇
- 中考英語模擬測試卷單選題100道及答案
- 二零二五年度酒水品質檢測服務承包合同范本3篇
- 二零二五年集團內部資金拆借服務合同2篇
- 二零二五年能源企業(yè)兼職環(huán)保工程師聘用合同3篇
- 二零二五年度酒店加盟合作協議合同范本解讀3篇
- 二零二五年度集裝箱式酒店租賃合同范本3篇
- 二零二五年度高性能鍋爐供暖工程承包及保養(yǎng)方案合同2篇
- 2024項目管理人員安全培訓考試題答案基礎題
- 《道路交通安全法》課件完整版
- 向女朋友認錯保證書范文
- 五分數加法和減法(課件)-數學五年級下冊
- 2024年四川省綿陽市中考語文試卷(附真題答案)
- 設計材料與工藝課程 課件 第1章 產品設計材料與工藝概述
- 幼兒園反恐防暴技能培訓內容
- 食品企業(yè)質檢員聘用合同
- 中醫(yī)診所內外部審計制度
- 自然辯證法學習通超星期末考試答案章節(jié)答案2024年
- 2024年國家危險化學品經營單位安全生產考試題庫(含答案)
- 護理員技能培訓課件
評論
0/150
提交評論