版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、2022-5-5莆田學(xué)院許振和1第第5 5章語法制導(dǎo)翻譯和中間代碼生成章語法制導(dǎo)翻譯和中間代碼生成2022-5-5莆田學(xué)院許振和2一、語義處理概述一、語義處理概述二、屬性文法二、屬性文法三、語法制導(dǎo)翻譯概論三、語法制導(dǎo)翻譯概論四、中間代碼的形式四、中間代碼的形式五、聲明語句的翻譯五、聲明語句的翻譯六、賦值語句的翻譯六、賦值語句的翻譯七、布爾表達(dá)式的翻譯七、布爾表達(dá)式的翻譯八、分支語句的翻譯八、分支語句的翻譯主要內(nèi)容主要內(nèi)容2022-5-5莆田學(xué)院許振和3指出:按照編譯程序的邏輯工作過程,語法分析后,接指出:按照編譯程序的邏輯工作過程,語法分析后,接下來就要進(jìn)行下來就要進(jìn)行語義分析語義分析了,語
2、義分析后,再生成中間了,語義分析后,再生成中間代碼。實際應(yīng)用中,往往在語法分析的同時,進(jìn)行語代碼。實際應(yīng)用中,往往在語法分析的同時,進(jìn)行語義分析并生成中間代碼,這就是義分析并生成中間代碼,這就是語法制導(dǎo)翻譯。語法制導(dǎo)翻譯。語法制導(dǎo)翻譯過程中,需要借助于語法制導(dǎo)翻譯過程中,需要借助于屬性文法屬性文法進(jìn)行語義描進(jìn)行語義描述和語義處理。述和語義處理。一、語義處理概述一、語義處理概述 應(yīng)用最廣的語義分析方法是語法制導(dǎo)翻譯,它的基本思想是將語言結(jié)構(gòu)的語義以屬性(attribute)的形式賦予代表此結(jié)構(gòu)的文法符號,而屬性的計算以語義規(guī)則(semantic rules)的形式賦予由文法符號組成的產(chǎn)生式。在語
3、法分析推導(dǎo)或歸約的每一步驟中,通過語義規(guī)則實現(xiàn)對屬性的計算,以達(dá)到對語義的處理。2022-5-5莆田學(xué)院許振和4 雖然語義的形式化工作已經(jīng)有相當(dāng)?shù)倪M(jìn)展,但由于語義雖然語義的形式化工作已經(jīng)有相當(dāng)?shù)倪M(jìn)展,但由于語義的復(fù)雜性,使得的復(fù)雜性,使得語義分析不能像語法分析那樣語義分析不能像語法分析那樣規(guī)范規(guī)范。到目前到目前為止,語義的形式化描述并沒有語法的形式化描述那樣成熟,為止,語義的形式化描述并沒有語法的形式化描述那樣成熟,使得使得語義的描述處于一種自然語言的描述或者半形式化描述語義的描述處于一種自然語言的描述或者半形式化描述的狀態(tài)的狀態(tài)。而沒有基于數(shù)學(xué)抽象的形式化描述,就很難設(shè)計出。而沒有基于數(shù)學(xué)抽
4、象的形式化描述,就很難設(shè)計出基于數(shù)學(xué)模型的統(tǒng)一算法來實現(xiàn)語義分析器的自動生成。詞基于數(shù)學(xué)模型的統(tǒng)一算法來實現(xiàn)語義分析器的自動生成。詞/語法分析器生成器語法分析器生成器LEX和和YACC為使用者提供用于描述屬性為使用者提供用于描述屬性的偽變量和語義棧,以支持語法制導(dǎo)翻譯,但是語義規(guī)則的的偽變量和語義棧,以支持語法制導(dǎo)翻譯,但是語義規(guī)則的書寫,仍屬于普通程序設(shè)計的范疇。書寫,仍屬于普通程序設(shè)計的范疇。 2022-5-5莆田學(xué)院許振和5源語言程序源語言程序匯編代碼匯編代碼詞法分析詞法分析語義分析語義分析語法分析語法分析代碼生成代碼生成前端處理前端處理后端處理后端處理 語義處理語義處理語義處理語義處理
5、2022-5-5莆田學(xué)院許振和6語義處理語義處理語義處理的環(huán)境:符號表語義處理的環(huán)境:符號表為語義分析提供類型、作用域等信息。為語義分析提供類型、作用域等信息。為代碼生成提供類型、作用域、存儲類別、存儲(相對)為代碼生成提供類型、作用域、存儲類別、存儲(相對)位置等信息。位置等信息。 語法制導(dǎo)翻譯的基本思想語法制導(dǎo)翻譯的基本思想是,為每一個產(chǎn)生式配上是,為每一個產(chǎn)生式配上語義規(guī)則并且在適當(dāng)?shù)臅r候執(zhí)行這些規(guī)則。即當(dāng)歸約語義規(guī)則并且在適當(dāng)?shù)臅r候執(zhí)行這些規(guī)則。即當(dāng)歸約(或或推導(dǎo)推導(dǎo))到某產(chǎn)生式時,除了按照產(chǎn)生式進(jìn)行相應(yīng)的代換之到某產(chǎn)生式時,除了按照產(chǎn)生式進(jìn)行相應(yīng)的代換之外,還要按照產(chǎn)生式所對應(yīng)的外,
6、還要按照產(chǎn)生式所對應(yīng)的語義規(guī)則執(zhí)行相應(yīng)的語義動語義規(guī)則執(zhí)行相應(yīng)的語義動作作,如計算、查填符號表、產(chǎn)生中間代碼、發(fā)布出錯信息,如計算、查填符號表、產(chǎn)生中間代碼、發(fā)布出錯信息等。等。2022-5-5莆田學(xué)院許振和7二、屬性文法二、屬性文法1、編譯中的、編譯中的語義處理語義處理是指兩個是指兩個功能功能: 審查每個語法結(jié)構(gòu)的審查每個語法結(jié)構(gòu)的靜態(tài)語義靜態(tài)語義,即驗證語法結(jié),即驗證語法結(jié)構(gòu)合法的程序是否真正有意義(靜態(tài)語義分析構(gòu)合法的程序是否真正有意義(靜態(tài)語義分析/靜靜態(tài)審查)。態(tài)審查)。 如果靜態(tài)語義正確,語義處理的工作是要執(zhí)行如果靜態(tài)語義正確,語義處理的工作是要執(zhí)行真正的翻譯,即真正的翻譯,即生成
7、中間代碼或目標(biāo)代碼生成中間代碼或目標(biāo)代碼。2、有的編譯程序直接生成目標(biāo)代碼,有的編譯程、有的編譯程序直接生成目標(biāo)代碼,有的編譯程序采用中間代碼。序采用中間代碼。2022-5-5莆田學(xué)院許振和8 3、語法制導(dǎo)翻譯是指在語法分析過程中,、語法制導(dǎo)翻譯是指在語法分析過程中,完成附加在所使用的產(chǎn)生式上的語義規(guī)則描述的完成附加在所使用的產(chǎn)生式上的語義規(guī)則描述的動作。動作。 4、屬性屬性,常用以描述事物或人的特征、性質(zhì),常用以描述事物或人的特征、性質(zhì)、品質(zhì)等,對編譯程序使用的語法樹的結(jié)點,可、品質(zhì)等,對編譯程序使用的語法樹的結(jié)點,可以用類型、值或存儲位置來描述它。以用類型、值或存儲位置來描述它。 5、當(dāng)把
8、每個文法符號和一組屬性相關(guān)聯(lián),、當(dāng)把每個文法符號和一組屬性相關(guān)聯(lián),并把產(chǎn)生式附加以并把產(chǎn)生式附加以語義規(guī)則語義規(guī)則的時候,就得到的時候,就得到屬性屬性文法。文法。2022-5-5莆田學(xué)院許振和96 6、一個、一個屬性文法屬性文法是一個三元組是一個三元組A A(G G,V V,F(xiàn) F),其中),其中G G:一個上下文無關(guān)文法,屬性文法的基礎(chǔ)。一個上下文無關(guān)文法,屬性文法的基礎(chǔ)。V:V:有窮的屬性集有窮的屬性集每個屬性與一個文法符號相關(guān)聯(lián)每個屬性與一個文法符號相關(guān)聯(lián)這些屬性代表與文法符號相關(guān)的語義信息這些屬性代表與文法符號相關(guān)的語義信息 如類型、地址、值、代碼、符號表內(nèi)容等等如類型、地址、值、代碼
9、、符號表內(nèi)容等等屬性與變量一樣,可以進(jìn)行計算和傳遞屬性與變量一樣,可以進(jìn)行計算和傳遞屬性加工的過程即是語義處理的過程屬性加工的過程即是語義處理的過程屬性加工與語法分析同時進(jìn)行屬性加工與語法分析同時進(jìn)行 F:F:關(guān)于屬性的屬性斷言或一組屬性的計算規(guī)則關(guān)于屬性的屬性斷言或一組屬性的計算規(guī)則( (稱為稱為語語義規(guī)則義規(guī)則) )斷言或語義規(guī)則與一個產(chǎn)生式相聯(lián)斷言或語義規(guī)則與一個產(chǎn)生式相聯(lián), ,只引用該產(chǎn)生式只引用該產(chǎn)生式左端或右端的終結(jié)符或非終結(jié)符相聯(lián)的屬性。左端或右端的終結(jié)符或非終結(jié)符相聯(lián)的屬性。2022-5-5莆田學(xué)院許振和107 7、例如文法、例如文法G G為:為: E E T T1 1+T+T
10、2 2| T| T1 1 or T or T2 2 T T num| true |falsenum| true |false對輸入串對輸入串3+43+4的語法樹如圖的語法樹如圖8.18.12022-5-5莆田學(xué)院許振和11 屬性文法記號屬性文法記號中常使用中常使用Ntt的形式表示與非終結(jié)符的形式表示與非終結(jié)符N N相聯(lián)的屬相聯(lián)的屬性性t t。 文法符號屬性的抽象表示采用點加標(biāo)識符文法符號屬性的抽象表示采用點加標(biāo)識符(.屬性屬性)的方法。例如,的方法。例如,對于表達(dá)式對于表達(dá)式E,可以用,可以用E.val、E.type、E.place、E.code等分別表等分別表示表達(dá)式的示表達(dá)式的值、類型、存
11、儲空間、代碼序列值、類型、存儲空間、代碼序列等屬性。而屬性在程序等屬性。而屬性在程序設(shè)計中的具體表示,可以根據(jù)實際情況采用適當(dāng)?shù)臄?shù)據(jù)結(jié)構(gòu)或者程設(shè)計中的具體表示,可以根據(jù)實際情況采用適當(dāng)?shù)臄?shù)據(jù)結(jié)構(gòu)或者程序代碼來實現(xiàn)。序代碼來實現(xiàn)。 比如可把完成對上面表達(dá)式的類型檢查的屬性文法寫成圖比如可把完成對上面表達(dá)式的類型檢查的屬性文法寫成圖8.28.2的形式:的形式:2022-5-5莆田學(xué)院許振和128 8、屬性文法最早由克努特、屬性文法最早由克努特(D.E.Knuth)(D.E.Knuth)提出,他把屬性分提出,他把屬性分成:成:繼承屬性、綜合屬性繼承屬性、綜合屬性。 屬性文法中,對應(yīng)于每個產(chǎn)生式屬性文
12、法中,對應(yīng)于每個產(chǎn)生式A A a a都有一套與之相都有一套與之相關(guān)聯(lián)的語義規(guī)則,每條規(guī)則的形式為關(guān)聯(lián)的語義規(guī)則,每條規(guī)則的形式為b:=f(cb:=f(c1 1,c,c2 2,c,ck k) )。 f f是一個函數(shù),是一個函數(shù),b b和和c c1 1,c,c2 2,c,ck k是該產(chǎn)生式文法符號的是該產(chǎn)生式文法符號的屬性。屬性。(1 1)如果)如果b b是是A A的一個屬性,的一個屬性,c c1 1,c,c2 2,c,ck k是產(chǎn)生式右部文法是產(chǎn)生式右部文法符號的屬性或符號的屬性或A A的其他屬性,則稱的其他屬性,則稱b b是是A A的的綜合屬性。綜合屬性。(2 2)如果)如果b b是產(chǎn)生式右部
13、某個文法符號是產(chǎn)生式右部某個文法符號X X的一個屬性,并且的一個屬性,并且c c1 1,c,c2 2,c,ck k是是A A或產(chǎn)生式右邊任何文法符號的屬性,則稱或產(chǎn)生式右邊任何文法符號的屬性,則稱b b是文法符號是文法符號X X的的繼承屬性。繼承屬性。2022-5-5莆田學(xué)院許振和13 (1) (1)非終結(jié)符既可有綜合屬性也可有繼承屬性,但非終結(jié)符既可有綜合屬性也可有繼承屬性,但文法文法開始符號沒有繼承屬性。開始符號沒有繼承屬性。 (2 2)終結(jié)符只有綜合屬性終結(jié)符只有綜合屬性,它們由詞法程序提供。例,它們由詞法程序提供。例8.18.1中,中,E E、T T和和F F的的valval屬性是綜合
14、屬性,例屬性是綜合屬性,例8.28.2中的中的L L的的inin是繼承屬性。是繼承屬性。 結(jié)點的綜合屬性值通過分析樹中該結(jié)點的結(jié)點的綜合屬性值通過分析樹中該結(jié)點的子結(jié)點子結(jié)點的屬的屬性值計算。繼承屬性值由該結(jié)點的性值計算。繼承屬性值由該結(jié)點的兄弟結(jié)點和父結(jié)點兄弟結(jié)點和父結(jié)點的屬的屬性值計算。性值計算。綜合屬性:歸約型屬性,用于綜合屬性:歸約型屬性,用于“自下而上自下而上”傳遞信傳遞信息。息。繼承屬性:推導(dǎo)型屬性,用于繼承屬性:推導(dǎo)型屬性,用于“自上而下自上而下”傳遞信傳遞信息。息。2022-5-5莆田學(xué)院許振和14例例5.15.1簡單算術(shù)表達(dá)式求值的語義描述簡單算術(shù)表達(dá)式求值的語義描述綜合屬性
15、的例子綜合屬性的例子語 義 規(guī) 則 L EE E1+TETT T1 * FTFF(E)FdigitPrint(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產(chǎn) 生 式非終結(jié)符非終結(jié)符E、T及及F都有一個綜合屬性都有一個綜合屬性val,符號符號digit僅有僅有一個綜合屬性一個綜合屬性,它,它的值由詞法分析器的值由詞法分析器提供。產(chǎn)生式提供。產(chǎn)生式L E語義規(guī)則是一個語義規(guī)則是一個過程過程,打印打印E的值的值,也可以理解也可以理解L的屬的
16、屬性是空的或虛的。性是空的或虛的。2022-5-5莆田學(xué)院許振和15綜合屬性的自下而上定值綜合屬性的自下而上定值LE.val=19E.val=15T.val=4T.val=15F.val=4T.val=3F.val=3F.val=5digit.lexval=4digit.lexval=5digit.lexval=3+*3*5+4的帶注釋的分析樹的帶注釋的分析樹2022-5-5莆田學(xué)院許振和16例例5.2繼承屬性的例子繼承屬性的例子產(chǎn) 生 式語 義 規(guī) 則D TL T int T real L L1,idL idL.in:=T.typeT.type=integerT.type:=real L1.
17、in:=L.in addtype(id.entry,L.in) addtype(id.entry,L.in)L.in 屬性值置為該說明語句指定的類型,是繼承屬性繼承屬性。Addtype是一個過程,功能是把每個標(biāo)識符的類型信息登陸在符號表的的相關(guān)項中。在表所示的語法制導(dǎo)翻譯中,非終結(jié)符在表所示的語法制導(dǎo)翻譯中,非終結(jié)符D D產(chǎn)生的聲明由產(chǎn)生的聲明由關(guān)鍵字關(guān)鍵字intint或或realreal及標(biāo)識符表組成,非終結(jié)符及標(biāo)識符表組成,非終結(jié)符T T有綜合屬有綜合屬性性typetype,它的值由聲明中的關(guān)鍵字決定。,它的值由聲明中的關(guān)鍵字決定。 2022-5-5莆田學(xué)院許振和17繼承屬性的自上而下定值
18、繼承屬性的自上而下定值Real id1,id2,id3DL.in= realL.in= realL.in= realT.type=realrealid2id1id3.,2022-5-5莆田學(xué)院許振和18三、語法制導(dǎo)翻譯概論三、語法制導(dǎo)翻譯概論基于屬性文法的處理過程(基于屬性文法的處理過程(語法制導(dǎo)翻譯語法制導(dǎo)翻譯):):對單詞符號串進(jìn)行語法分析,構(gòu)造語法分析樹,然對單詞符號串進(jìn)行語法分析,構(gòu)造語法分析樹,然后根據(jù)需要構(gòu)造屬性依賴圖,遍歷語法樹并在語法樹的后根據(jù)需要構(gòu)造屬性依賴圖,遍歷語法樹并在語法樹的各結(jié)點處按語義規(guī)則進(jìn)行計算。各結(jié)點處按語義規(guī)則進(jìn)行計算。 根據(jù)屬性表示的抽象程度,語義規(guī)則可以
19、有兩種表示方式。用根據(jù)屬性表示的抽象程度,語義規(guī)則可以有兩種表示方式。用抽抽象的屬性和運算符號象的屬性和運算符號表示的語義規(guī)則稱之為表示的語義規(guī)則稱之為語法制導(dǎo)定義語法制導(dǎo)定義,而用,而用具體具體屬性和運算屬性和運算表示的語義規(guī)則稱之為表示的語義規(guī)則稱之為翻譯方案翻譯方案,語義規(guī)則也被習(xí)慣地稱,語義規(guī)則也被習(xí)慣地稱為語義動作。語法制導(dǎo)定義是為語義動作。語法制導(dǎo)定義是抽象抽象的翻譯說明,它隱蔽一些實現(xiàn)的翻譯說明,它隱蔽一些實現(xiàn)細(xì)節(jié)細(xì)節(jié),翻譯方案指明方案中語義規(guī)則的計算次序和實現(xiàn)翻譯方案指明方案中語義規(guī)則的計算次序和實現(xiàn)細(xì)節(jié)細(xì)節(jié)。2022-5-5莆田學(xué)院許振和191、計算語義規(guī)則、計算語義規(guī)則 所
20、謂依賴圖是一個有向圖,用于描述分析所謂依賴圖是一個有向圖,用于描述分析樹中的屬性和屬性間的相互依賴關(guān)系。樹中的屬性和屬性間的相互依賴關(guān)系。屬性之間的依賴關(guān)系,屬性之間的依賴關(guān)系,實質(zhì)上反映了屬性計算實質(zhì)上反映了屬性計算的先后次序的先后次序 如果分析樹中一結(jié)點的屬性如果分析樹中一結(jié)點的屬性b依賴于屬性依賴于屬性c,那么這個結(jié)點的屬性那么這個結(jié)點的屬性b的語義規(guī)則的計算必須的語義規(guī)則的計算必須在定義屬性在定義屬性c的語義規(guī)則的計算之后。分析樹的語義規(guī)則的計算之后。分析樹結(jié)點的繼承屬性和綜合屬性間的互相依賴關(guān)系結(jié)點的繼承屬性和綜合屬性間的互相依賴關(guān)系可以用名為依賴圖的有向圖來描繪??梢杂妹麨橐蕾噲D的
21、有向圖來描繪。 2022-5-5莆田學(xué)院許振和20例例8.2的句子的句子Real id1,id2,id3分析樹的依賴圖(圖中分析樹的依賴圖(圖中的結(jié)點用數(shù)字表示)如圖的結(jié)點用數(shù)字表示)如圖8.4:2022-5-5莆田學(xué)院許振和21vL.inL.in屬性屬性依賴依賴T.type (L.in:=T.type)T.type (L.in:=T.type),L1.inL1.in依賴依賴L.in (L1.in:=L.in) ,L.in (L1.in:=L.in) ,語義規(guī)則語義規(guī)則addtype(id.entry,L.in)addtype(id.entry,L.in)產(chǎn)生結(jié)點產(chǎn)生結(jié)點6,8,106,8,1
22、0為虛擬為虛擬屬性結(jié)點。屬性結(jié)點。v從依賴圖的拓?fù)渑判蛑?,可以得到所有計算語從依賴圖的拓?fù)渑判蛑校梢缘玫剿杏嬎阏Z義規(guī)則的順序。用這個順序來計算語義規(guī)則就得義規(guī)則的順序。用這個順序來計算語義規(guī)則就得到輸入符號串的翻譯。到輸入符號串的翻譯。v屬性計算有樹遍歷的和一遍掃描屬性計算有樹遍歷的和一遍掃描的方法。的方法。2022-5-5莆田學(xué)院許振和222 2、S S屬性文法和自下而上翻譯屬性文法和自下而上翻譯 適用于指導(dǎo)自下而上的分析適用于指導(dǎo)自下而上的分析 一個屬性文法稱為一個屬性文法稱為S屬性文法屬性文法,當(dāng)且僅當(dāng)滿足當(dāng)且僅當(dāng)滿足如下條件:如下條件:(1)所有非終結(jié)符的屬性是)所有非終結(jié)符的屬性
23、是綜合屬性綜合屬性;(2)同一產(chǎn)生式中相同符號的各綜合屬性之)同一產(chǎn)生式中相同符號的各綜合屬性之間無相互依賴關(guān)系;間無相互依賴關(guān)系;(3)如果)如果q是某個產(chǎn)生式中文法符號是某個產(chǎn)生式中文法符號V的繼承的繼承屬性,則屬性屬性,則屬性q的值僅僅依賴于該產(chǎn)生式右部的值僅僅依賴于該產(chǎn)生式右部位于位于V左邊的符號的屬性。左邊的符號的屬性。2022-5-5莆田學(xué)院許振和23 綜合屬性可在分析輸入符號串的同時自下而上來計算綜合屬性可在分析輸入符號串的同時自下而上來計算 S S屬性文法的翻譯器通??山柚趯傩晕姆ǖ姆g器通常可借助于LRLR分析器分析器實現(xiàn)。實現(xiàn)。 在在S S屬性文法的基礎(chǔ)上,屬性文法的基礎(chǔ)
24、上,LRLR分析器可以改造為一個翻分析器可以改造為一個翻譯器,在對輸入串進(jìn)行語法分析的同時對屬性進(jìn)行計譯器,在對輸入串進(jìn)行語法分析的同時對屬性進(jìn)行計算。算。 需要對需要對LRLR分析器增加分析器增加語義棧語義棧, ,以保存與棧中文法符號以保存與棧中文法符號有關(guān)的綜合屬性值。有關(guān)的綜合屬性值。 每當(dāng)進(jìn)行歸約時,新的屬性值就由棧中正在每當(dāng)進(jìn)行歸約時,新的屬性值就由棧中正在歸約歸約的產(chǎn)的產(chǎn)生式右邊符號的屬性值來計算生式右邊符號的屬性值來計算2022-5-5莆田學(xué)院許振和24對例對例5.1的輸入串的輸入串2+3*5語法樹如圖語法樹如圖8.5:2022-5-5莆田學(xué)院許振和25假定有一個假定有一個LR語
25、法分析器,現(xiàn)在把它的分析棧擴充,語法分析器,現(xiàn)在把它的分析棧擴充,使得每個文法符號都跟有語義值,即把棧的結(jié)構(gòu)看成使得每個文法符號都跟有語義值,即把棧的結(jié)構(gòu)看成圖圖8.6所示:所示:S S屬性的自下而上計算,帶綜合屬性的分析屬性的自下而上計算,帶綜合屬性的分析棧:棧:2022-5-5莆田學(xué)院許振和26采用的采用的LR分析表為表分析表為表7.8,不過要將其中的,不過要將其中的i改為改為digit,分析和計值,分析和計值2+3*5的過程列在圖的過程列在圖8.7所示:所示:2022-5-5莆田學(xué)院許振和27u適合于指導(dǎo)自上而下的分析適合于指導(dǎo)自上而下的分析 一個屬性文法稱為一個屬性文法稱為L L屬性文
26、法,如果對于每個產(chǎn)生屬性文法,如果對于每個產(chǎn)生式式A AX X1 1X X2 2XXn n, ,其每個語義規(guī)則中的每個屬性或者是綜合其每個語義規(guī)則中的每個屬性或者是綜合屬性,或者是屬性,或者是X Xj j(1j n)(1j n)的一個繼承屬性且這個繼承的一個繼承屬性且這個繼承屬性僅依賴于:屬性僅依賴于: (1 1)產(chǎn)生式)產(chǎn)生式X Xj j在左邊符號在左邊符號X X1 1,X,X2 2,X,Xn n的屬性的屬性 (2 2)A A的繼承屬性的繼承屬性 S S屬性文法一定是屬性文法一定是L L屬性文法,屬性文法,L L屬性文法允許屬性文法允許一次遍歷就計算出所有屬性值。一次遍歷就計算出所有屬性值。
27、3 3、L L屬性文法在自上而下分析屬性文法在自上而下分析中的實現(xiàn)中的實現(xiàn)2022-5-5莆田學(xué)院許振和28 L L屬性文法的翻譯器通??山柚趯傩晕姆ǖ姆g器通常可借助于LLLL分析器分析器實現(xiàn)。實現(xiàn)。 在在L L屬性文法的基礎(chǔ)上,屬性文法的基礎(chǔ)上,LLLL分析器可以改造分析器可以改造為一個翻譯器,在對輸入串進(jìn)行語法分析的同為一個翻譯器,在對輸入串進(jìn)行語法分析的同時對屬性進(jìn)行計算。時對屬性進(jìn)行計算。 需要對需要對LLLL分析器增加分析器增加語義棧語義棧, ,以保存與棧中文以保存與棧中文法符號有關(guān)的繼承屬性值。法符號有關(guān)的繼承屬性值。 每當(dāng)進(jìn)行推導(dǎo)時,新的屬性值就由棧中正在推每當(dāng)進(jìn)行推導(dǎo)時,新
28、的屬性值就由棧中正在推導(dǎo)的產(chǎn)生式左邊符號的屬性值來計算。導(dǎo)的產(chǎn)生式左邊符號的屬性值來計算。2022-5-5莆田學(xué)院許振和29例子例子5.3: 將中綴表達(dá)式翻譯成相應(yīng)的后綴表達(dá)式的屬性文法將中綴表達(dá)式翻譯成相應(yīng)的后綴表達(dá)式的屬性文法,其中其中addop表示表示+或或- EE addop T print(addop,Lexeme) | T Tnum print(num,val) 比如對串比如對串2+3-5的分析同時執(zhí)行語義動作打印出的分析同時執(zhí)行語義動作打印出23+5-,語法分析樹中加虛線聯(lián)結(jié)的語義結(jié)點,形成一個,語法分析樹中加虛線聯(lián)結(jié)的語義結(jié)點,形成一個可說明語義動作的樹,如圖可說明語義動作的樹
29、,如圖8.8:2022-5-5莆田學(xué)院許振和302022-5-5莆田學(xué)院許振和31 上面是一個含左遞歸規(guī)則的文法,如采用上面是一個含左遞歸規(guī)則的文法,如采用LL(1)分析必須改寫文法如下:)分析必須改寫文法如下: E TR R addop TR1 T num這時這時2+3-5的語法樹如圖的語法樹如圖8.9:2022-5-5莆田學(xué)院許振和32將后綴式將后綴式23+5-輸出的動作在語法樹中應(yīng)輸出的動作在語法樹中應(yīng)出現(xiàn)的位置如圖出現(xiàn)的位置如圖8.10所示:所示:2022-5-5莆田學(xué)院許振和33例例5.4(中綴表達(dá)式翻譯成相應(yīng)的后綴表達(dá)式):(中綴表達(dá)式翻譯成相應(yīng)的后綴表達(dá)式): E TR R ad
30、dop Tprint(addop,Lexeme)R1 T num print(num.val) 把把語義動作語義動作嵌在右部文法符號嵌在右部文法符號T和和R之間,這種語義處理之間,這種語義處理的描述形式稱為的描述形式稱為翻譯模式(翻譯模式(也稱翻譯方案)也稱翻譯方案) 翻譯方案是適合語法制導(dǎo)翻譯的另一種描述形式。翻譯方案是適合語法制導(dǎo)翻譯的另一種描述形式。 翻譯翻譯模式給出了使用語義規(guī)則進(jìn)行模式給出了使用語義規(guī)則進(jìn)行計算的次序計算的次序,可把某些實現(xiàn),可把某些實現(xiàn)細(xì)節(jié)細(xì)節(jié)表示出來。表示出來。翻譯方案和語法制導(dǎo)定義不同的是它的語義翻譯方案和語法制導(dǎo)定義不同的是它的語義動作(而不是語義規(guī)則)放在括
31、號動作(而不是語義規(guī)則)放在括號“ ” ”內(nèi),并且可以插在產(chǎn)生式右部的任何地方。內(nèi),并且可以插在產(chǎn)生式右部的任何地方。2022-5-5莆田學(xué)院許振和34一般轉(zhuǎn)換左遞歸翻譯模式的方法簡述如下:一般轉(zhuǎn)換左遞歸翻譯模式的方法簡述如下: 假設(shè)翻譯模式為:假設(shè)翻譯模式為: A A1YA.a:=g(A1.a,Y.y) A X A.a:=f(X.x)每個文法符號都有一個綜合屬性,用相應(yīng)的小寫字母每個文法符號都有一個綜合屬性,用相應(yīng)的小寫字母表示表示,g和和f是任意函數(shù)。消除左遞歸,文法轉(zhuǎn)換成:是任意函數(shù)。消除左遞歸,文法轉(zhuǎn)換成: A XR R YR刪除翻譯方案的左遞歸方法刪除翻譯方案的左遞歸方法2022-5
32、-5莆田學(xué)院許振和35再考慮語義動作,則翻譯模式為,其中使再考慮語義動作,則翻譯模式為,其中使用了用了R的的繼承屬性繼承屬性i和綜合屬性和綜合屬性s: A XR.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下面例子幫助理解:下面例子幫助理解:2022-5-5莆田學(xué)院許振和36 例例5-55-5下面將圖下面將圖5-135-13的翻譯方案變換成圖的翻譯方案變換成圖5-145-14的翻譯方案。新的翻譯方案為表達(dá)式的翻譯方案。新的翻譯方案為表達(dá)式9-5+29-5+2產(chǎn)生圖產(chǎn)生圖5-155-15的注釋分析樹,圖的注釋分
33、析樹,圖5-155-15中的箭頭暗示了計算中的箭頭暗示了計算表達(dá)式值的一種方法。表達(dá)式值的一種方法。2022-5-5莆田學(xué)院許振和37 E E TR TR R R addopaddop TR1 TR1 T T numnum2022-5-5莆田學(xué)院許振和38實現(xiàn)自下而上計算繼承屬性方法:實現(xiàn)自下而上計算繼承屬性方法:從翻譯模式中從翻譯模式中去掉嵌入去掉嵌入在產(chǎn)生式中間的在產(chǎn)生式中間的動作動作: 引入新的非終結(jié)符引入新的非終結(jié)符N N和產(chǎn)生式和產(chǎn)生式N N ,把嵌入在生產(chǎn)式中,把嵌入在生產(chǎn)式中間的動作用非終結(jié)符間的動作用非終結(jié)符N N代替,并把這個動作放在產(chǎn)生式后面代替,并把這個動作放在產(chǎn)生式后面
34、例如下面的翻譯模式:例如下面的翻譯模式:E E T RT RR R +Tprint(+)R+Tprint(+)R1 1R R -T -T print(-)Rprint(-)R1 1R R T T numprint(num,val)numprint(num,val)4、L屬性文法在自下而上分析中的實現(xiàn)屬性文法在自下而上分析中的實現(xiàn)(1 1) 刪除翻譯方案中嵌入的動作刪除翻譯方案中嵌入的動作2022-5-5莆田學(xué)院許振和39引入引入M和和N,變換后的翻譯模式如下,原嵌入在產(chǎn)生,變換后的翻譯模式如下,原嵌入在產(chǎn)生式中間的動作都在產(chǎn)生式后面了式中間的動作都在產(chǎn)生式后面了 E T R R +TMR1 R
35、 -T NR1 R T numprint(num.val) M print(+) N print(-)2022-5-5莆田學(xué)院許振和40(2) 2) 分析棧上的繼承屬性分析棧上的繼承屬性 例例5-6 5-6 如圖如圖5-195-19所示,使用繼承屬性,標(biāo)識符的類型所示,使用繼承屬性,標(biāo)識符的類型屬性可通過復(fù)制規(guī)則來傳遞。見教材屬性可通過復(fù)制規(guī)則來傳遞。見教材P167P1672022-5-5莆田學(xué)院許振和41四、中間代碼的形式四、中間代碼的形式1、逆波蘭記號(也稱后綴式)、逆波蘭記號(也稱后綴式) 這種表示法將這種表示法將運算對象寫在前面,把運算符號寫在后面運算對象寫在前面,把運算符號寫在后面逆
36、波蘭表示的例子逆波蘭表示的例子A+b A+b ab+ab+A+bA+b* *c c abcabc* *+ +(a+b)(a+b)* *c c ab+cab+c* *a+ba+b* *c/(d+e) c/(d+e) abcabc* *de+/+de+/+A + B A + B * * ( C - D ) + E / ( C - D ) N ( C - D ) + E / ( C - D ) NA B C D - A B C D - * * + E C D N / + + E C D N / +后綴表示是語法樹的線性化表示,下圖(后綴表示是語法樹的線性化表示,下圖(a a)中語)中語法樹的后綴表示
37、為:法樹的后綴表示為: abc uminus abc uminus * * b c uminus b c uminus * * + := + :=2022-5-5莆田學(xué)院許振和42例把下述產(chǎn)生式定義的算術(shù)表達(dá)式映射到后綴波蘭表示: EE+T E T T TF T F F (E) F a E=ET+ E=T T=TF T=F F=E F=a 產(chǎn)生式 翻譯規(guī)則翻譯規(guī)則2022-5-5莆田學(xué)院許振和43 確定輸入確定輸入a+aa+a a a的輸出:的輸出: (E,E)(E,E)(E+T,ET+)(E+T,ET+)(T+T,TT+)(T+T,TT+) (F+T,FT+)(F+T,FT+)(a+T,aT
38、+)(a+T,aT+) (a+T(a+T F,aTFF,aTF +)+) (a+F(a+F F,aFFF,aFF +)+) (a+a(a+a F,aaFF,aaF +) +) (a+a(a+a a,aaaa,aaa +)+)2022-5-5莆田學(xué)院許振和442 2、四元式、四元式 四元式的組成:算符四元式的組成:算符opop,第一和第二運算對象,第一和第二運算對象ARG1ARG1和和ARG2ARG2及及運算結(jié)果運算結(jié)果RESULTRESULT例如:例如:a:=ba:=b* *c+bc+b* *d d (1) ( (1) (* *, b,c,t1), b,c,t1) (2) ( (2) (* *
39、,b,d,t2)b,d,t2) (3) (+ (3) (+,t1,t2,t3)t1,t2,t3) (4) (:= (4) (:=, t3,t3,a),a)為了直觀,也把四元式的形式寫成簡單賦值形式(三地址碼):為了直觀,也把四元式的形式寫成簡單賦值形式(三地址碼): (1) t1:=b(1) t1:=b* *c (2) t2:=bc (2) t2:=b* *d d (3) t3:=t1+t2 (4) a:=t3 (3) t3:=t1+t2 (4) a:=t3表示空表示空看作看作a:=t3a:=t32022-5-5莆田學(xué)院許振和45四元式的語法制導(dǎo)翻譯四元式的語法制導(dǎo)翻譯將簡單賦值句的求值翻譯成
40、四元式的語法制導(dǎo)翻譯如下所示:將簡單賦值句的求值翻譯成四元式的語法制導(dǎo)翻譯如下所示:(1) A id := E A.code := newtemp; emit(:=,entry(),E.code, A.code) (2) E E1 + E2 E.code := newtemp; emit( +, E1.code,E2.code, E.code) (3) E E1 * E2 E.code := newtemp; emit( *, E1.code,E2.code, E.code) (4) E ( E1 ) E.code := E1.code (5) E E1 E.code := ne
41、wtemp; emit( ,E1.code, , E.code) (6) E id E.code := entry() 屬性屬性.code:表示存放運算結(jié)果的變量;:表示存放運算結(jié)果的變量;函數(shù)函數(shù)newtemp:返回一個新的臨時變量,如:返回一個新的臨時變量,如T1,T2,等;等;過程過程emit( op,arg1,arg2, result):生成一個四元式。若運算是一元的,如:生成一個四元式。若運算是一元的,如EE1,則則arg2可以為空。可以為空。2022-5-5莆田學(xué)院許振和46四元式表示的例子四元式表示的例子A + B A + B * * ( C - D ) + E /
42、 ( C - D ) N ( C - D ) + E / ( C - D ) N(1 1) ( - ( - ,C C,D D,T1)T1)(2 2) ( ( * * ,B B,T1T1,2)2)(3 3) ( + ( + ,A A,T2T2,T3)T3)(4 4) ( - ( - ,C C,D D,T4)T4)(5 5) ( ( ,T4T4,N N,T5)T5)(6 6) ( /( /,E E,T5T5,T6)T6)(7 7) ( +( +,T3T3,T6T6,T7)T7)2022-5-5莆田學(xué)院許振和473 3、三元式表示、三元式表示 每個三元式的組成:算符每個三元式的組成:算符opop,第
43、,第1 1運算對象運算對象ARG1ARG1,第,第2 2運算對象運算對象ARG2ARG2 例如:例如:a:=ba:=b* *c+bc+b* *d d (1)(1) ( (* *, b,c), b,c) (2)(2) ( (* * ,b,d) ,b,d) (3)(3) (+ ,(1),(2) (+ ,(1),(2) (4)(4) (:= ,(3),a) (:= ,(3),a) 和四元式的比較:和四元式的比較:無須臨時變量;無須臨時變量;占用存儲空間少;占用存儲空間少;相互引用太多,使得難以進(jìn)行代碼優(yōu)化。相互引用太多,使得難以進(jìn)行代碼優(yōu)化。2022-5-5莆田學(xué)院許振和48三元式表示的例子三元式表
44、示的例子A + B A + B * * ( C - D ) + E / ( C - D ) N ( C - D ) + E / ( C - D ) N(1) ( -(1) ( -,C C,D)D)(2) ( (2) ( * *,B B,(1)(1)(3) ( +(3) ( +,A A,(2)(2)(4) ( -(4) ( -,C C,D)D)(5) ( (5) ( ,(4)(4),N)N)(6) ( /(6) ( /,E E,(5)(5)(7) ( +(7) ( +,(3)(3),(6)(6)2022-5-5莆田學(xué)院許振和49簡單賦值句的求值翻譯成三元式的語法制導(dǎo)翻譯如下所示簡單賦值句的求值翻
45、譯成三元式的語法制導(dǎo)翻譯如下所示:(1) Aid := E A.code := trip(:=(1) Aid := E A.code := trip(:=,entry()entry(),E.code) E.code) (2) EE1+E2 E.code := trip( +(2) EE1+E2 E.code := trip( +, E1.codeE1.code,E2.code ) E2.code ) (3) EE1(3) EE1* *E2 E.code := trip( E2 E.code := trip( * *, E1.codeE1.code,E2.code )
46、 E2.code ) (4) E( E1 ) E.code := E1.code (4) E( E1 ) E.code := E1.code (5) EE1 E.code := trip( (5) EE1 E.code := trip( ,E1.codeE1.code, ) ) (6) Eid E.code := entry() (6) Eid E.code := entry() 2022-5-5莆田學(xué)院許振和504 4、樹形表示、樹形表示( (圖表示法圖表示法) )樹形表示的定義:樹形表示的定義: 表達(dá)式的樹形表示很容易實現(xiàn):簡單變量或常數(shù)的表達(dá)式的樹形表示很容易
47、實現(xiàn):簡單變量或常數(shù)的樹就是該變量或常數(shù)自身,如果表達(dá)式樹就是該變量或常數(shù)自身,如果表達(dá)式e e1 1和和e e2 2的樹分別的樹分別為為T T1 1和和T T2 2,那么,那么e e1 1+e+e2 2,e,e1 1* *e e2 2,-e,-e1 1的樹分別為:的樹分別為:2022-5-5莆田學(xué)院許振和51 采用樹形表示作為一種中間代碼形式,有助于代碼采用樹形表示作為一種中間代碼形式,有助于代碼的產(chǎn)生和優(yōu)化。的產(chǎn)生和優(yōu)化。 樹形表示是三元式表示的翻版,上述三元式可表示樹形表示是三元式表示的翻版,上述三元式可表示成右邊的樹表示:成右邊的樹表示:2022-5-5莆田學(xué)院許振和52 三地址代碼一
48、般形式為如下的語句序列:三地址代碼一般形式為如下的語句序列: x := y op zx := y op z 其中其中x x、y y和和z z是名字、常數(shù)或編譯器產(chǎn)生的臨時變量,是名字、常數(shù)或編譯器產(chǎn)生的臨時變量,opop代表運算符。代表運算符。5 5、三地址碼、三地址碼P174-175P174-175 例例 如圖如圖5-265-26所示的語法樹和所示的語法樹和dagdag由如圖由如圖5-275-27所示的三地址代所示的三地址代碼序列表示。碼序列表示。 2022-5-5莆田學(xué)院許振和535.1 5.1 三地址語句的類型三地址語句的類型P175P175 三地址語句類似于匯編代碼。語句可以有符號標(biāo)號
49、,三地址語句類似于匯編代碼。語句可以有符號標(biāo)號,而且可以有控制流語句。符號標(biāo)號代表中間代碼數(shù)組中而且可以有控制流語句。符號標(biāo)號代表中間代碼數(shù)組中三地址語句的下標(biāo)。三地址語句的下標(biāo)。 常用的三地址語句:常用的三地址語句: (1 1)形如)形如x :x :y op zy op z的賦值語句,其中的賦值語句,其中opop是二元算術(shù)運算是二元算術(shù)運算或邏輯運算?;蜻壿嬤\算。(2 2)形如)形如x :x :op yop y的賦值語句,其中的賦值語句,其中opop是一元運算。是一元運算。(3 3)形如)形如x := yx := y的復(fù)寫語句。的復(fù)寫語句。(4 4)無條件轉(zhuǎn)移)無條件轉(zhuǎn)移goto Lgoto
50、 L。(5 5)形如:)形如:if x relop y goto Lif x relop y goto L的條件轉(zhuǎn)移。的條件轉(zhuǎn)移。2022-5-5莆田學(xué)院許振和54(6 6)param xparam x和和“call pcall p,n”n”用于過程調(diào)用,其中用于過程調(diào)用,其中n n表表示實參個數(shù),示實參個數(shù),return yreturn y用于過程返回,用于過程返回,y y代表返回值,它代表返回值,它也可以不出現(xiàn),它們的典型使用是:也可以不出現(xiàn),它們的典型使用是: param x1param x1 param x2 param x2 param xn param xn call p call
51、 p,n n 這些語句是作為過程這些語句是作為過程p(x1,x2,xn)p(x1,x2,xn)調(diào)用的一部分。調(diào)用的一部分。(7 7)形如)形如x := yix := yi和和xi := yxi := y的索引賦值。的索引賦值。(8 8)形如)形如x := &yx := &y、x := x := * *y y和和* *x := yx := y的地址和指針賦的地址和指針賦值。值。 2022-5-5莆田學(xué)院許振和555.2 5.2 語法制導(dǎo)翻譯生成三地址碼語法制導(dǎo)翻譯生成三地址碼P176P176 表表5-125-12中的中的S S屬性定義生成賦值語句的三地址碼。綜合屬性屬性定義生成賦
52、值語句的三地址碼。綜合屬性S.codeS.code代表賦值代表賦值S S的三地址碼。的三地址碼。非終結(jié)符非終結(jié)符E E具具有兩個屬性:有兩個屬性:表中符號表中符號gen(x;=y+z)表示三地址語句表示三地址語句x:=y+z2022-5-5莆田學(xué)院許振和565.3 5.3 三地址語句與四元式三地址語句與四元式P176-177P176-177 三地址語句的表示形式分別有四元式、三元式和間三地址語句的表示形式分別有四元式、三元式和間接三元式。接三元式。 例例 表表5-135-13中的四元式是賦值語句中的四元式是賦值語句a := ba := b* *-c+b-c+b* *-c-c的四元式,它們從圖的
53、四元式,它們從圖5-265-26(a a)的三地址代碼得到。)的三地址代碼得到。 2022-5-5莆田學(xué)院許振和57 編譯程序把說明語句中定義的名字和性質(zhì)登記在符編譯程序把說明語句中定義的名字和性質(zhì)登記在符號表中,用以檢查名字的引用和說明是否一致。號表中,用以檢查名字的引用和說明是否一致。 過程說明和動態(tài)數(shù)組的說明有相應(yīng)的代碼過程說明和動態(tài)數(shù)組的說明有相應(yīng)的代碼1 1、簡單說明語句的翻譯、簡單說明語句的翻譯 程序設(shè)計語言中最簡單的說明語句的語法描述為:程序設(shè)計語言中最簡單的說明語句的語法描述為: DDintegerinteger | |realreal ,id | id,id | id 即使用
54、關(guān)鍵字即使用關(guān)鍵字integerinteger和和realreal定義一串名字的性質(zhì)定義一串名字的性質(zhì) 對這種說明語句的翻譯是指在符號表中登錄該名和性對這種說明語句的翻譯是指在符號表中登錄該名和性質(zhì)質(zhì), ,把上述文法改寫成:把上述文法改寫成: D D D1,id|integer id|real idD1,id|integer id|real id五、聲明語句的翻譯五、聲明語句的翻譯2022-5-5莆田學(xué)院許振和58 給非終結(jié)符給非終結(jié)符D D一個語義變量一個語義變量D.attD.att,用以記錄說明語,用以記錄說明語句所引入的名字的性質(zhì)(句所引入的名字的性質(zhì)(intint還是還是realrea
55、l),使用過程),使用過程enter(id,A)enter(id,A)把名字把名字idid和性質(zhì)和性質(zhì)A A登錄在名表中。登錄在名表中。(1 1)Dinteger id enter(id,int); Dinteger id enter(id,int); D.att:=int D.att:=int(2 2)Dreal id enter(id,real); Dreal id enter(id,real); D.att:=real D.att:=real(3 3)D D D D1 1, id enter(id,D, id enter(id,D1 1.att);.att); D.att:=D D.at
56、t:=D1 1.att.att2022-5-5莆田學(xué)院許振和592 2、過程中的聲明語句、過程中的聲明語句 在在FORTRANFORTRAN、PascalPascal、C C、C#C#和和JavaJava等語言中,語法等語言中,語法允許一個允許一個“過程過程”或程序塊把所有的局部聲明作為一組集或程序塊把所有的局部聲明作為一組集中在一起進(jìn)行處理。例如,對于一個中在一起進(jìn)行處理。例如,對于一個C/C+C/C+的聲明序列:的聲明序列: int offsetint offset; double sumdouble sum; char tokenchar token; 如果該聲明在內(nèi)存中得到的首地址為如
57、果該聲明在內(nèi)存中得到的首地址為10001000,那么局部,那么局部名的地址計算如下:名的地址計算如下: offsetoffset的地址是的地址是1000;1000; sum sum的地址為的地址為1000+offset1000+offset的字節(jié)數(shù)的字節(jié)數(shù)=1000+4=1004;=1000+4=1004; token token的地址是的地址是1004+sum1004+sum的字節(jié)數(shù)的字節(jié)數(shù)=1004+8=1012;=1004+8=1012;2022-5-5莆田學(xué)院許振和60 在如圖在如圖5-295-29所示的翻譯方案中,非終結(jié)符所示的翻譯方案中,非終結(jié)符P P產(chǎn)生形如產(chǎn)生形如idid:T
58、T的聲明序列,用全局變量的聲明序列,用全局變量offsetoffset來記住下一個可用來記住下一個可用的相對地址。的相對地址。 每看見一個新名字,則把名字連同每看見一個新名字,則把名字連同offsetoffset的當(dāng)前值登的當(dāng)前值登入符號表,然后入符號表,然后offsetoffset增加增加. . 一般,一般,offsetoffset增加由該增加由該名字類型決定名字類型決定的量,稱為數(shù)據(jù)的量,稱為數(shù)據(jù)對象的寬度,用屬性對象的寬度,用屬性widthwidth表示表示. .2022-5-5莆田學(xué)院許振和61賦值語句的執(zhí)行有以下幾個步驟:賦值語句的執(zhí)行有以下幾個步驟:(1 1)計算右部表達(dá)式)計算右
59、部表達(dá)式E E的值;的值;(2 2)必要時對)必要時對E E的值進(jìn)行類型轉(zhuǎn)換,強制到的值進(jìn)行類型轉(zhuǎn)換,強制到V V的的類型;類型;(3 3)計算變量)計算變量V V的地址;的地址;(4 4)把)把E E的值送入的值送入V V的地址。的地址。六、賦值語句的翻譯六、賦值語句的翻譯一般語法定義是:一般語法定義是: V := E ;V := E ;2022-5-5莆田學(xué)院許振和62產(chǎn)生式產(chǎn)生式語義規(guī)則語義規(guī)則E E1+TE.val:=E1.val+T.val; E.type:=E1.typeETE.val:=T.val; E.type:=T.typeT T1 * FT.val:=T1.val F.va
60、l; T.type:=T1.typeTFT.val:=F.val; T.type:=F.typeF(E)F.val:=E.val; F.type:=E.typeFdigitF.val:=digit.lexval; F.type:= digit.lexval1、簡單算術(shù)表達(dá)式的屬性文法、簡單算術(shù)表達(dá)式的屬性文法(復(fù)習(xí)復(fù)習(xí))2022-5-5莆田學(xué)院許振和63 首先對首先對id表示的單詞定義屬性表示的單詞定義屬性,用做語義,用做語義變量,用變量,用Lookup()語義函數(shù)審查語義函數(shù)審查是否出現(xiàn)是否出現(xiàn)符號表中,如在,則返回一指向該登錄項的指針,否則符號表中,如在,則返回一
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 《豬姜片吸蟲病》課件
- 地理(內(nèi)蒙古)-【八省聯(lián)考】河南、山西、陜西、內(nèi)蒙古、四川、云南、寧夏、青海八省2025年高考綜合改革適應(yīng)性演練聯(lián)考試題和答案
- 《知識大考驗》課件
- 小學(xué)一年級10以內(nèi)連加連減口算練習(xí)題
- 出凝血疾病的實驗診斷學(xué)思路-2019年華醫(yī)網(wǎng)繼續(xù)教育答案
- 作業(yè)姿勢的分類分析及抗疲勞方案
- 2019工程倫理慕課答案(2019秋)習(xí)題及期末答案
- 2022年合肥幼兒師范高等??茖W(xué)校單招面試題庫及答案解析
- 小學(xué)數(shù)學(xué)二年級數(shù)學(xué)加減法練習(xí)題
- 物流運輸客服工作經(jīng)驗
- 【川教版】《生命 生態(tài) 安全》四上第13課《預(yù)防凍瘡》課件
- 工廠籌建方案
- UPVC管道安裝施工方法
- 河南省鄭州高新技術(shù)產(chǎn)業(yè)開發(fā)區(qū)2023-2024學(xué)年三年級上學(xué)期1月期末科學(xué)試題
- 女裝行業(yè)退貨率分析
- 計算機基礎(chǔ)理論-進(jìn)制的概念及換算試題及答案
- 森林草原防火工作培訓(xùn)課件
- 2023年婦科門診總結(jié)及計劃
- 方大重整海航方案
- 河北省秦皇島市昌黎縣2023-2024學(xué)年八年級上學(xué)期期末數(shù)學(xué)試題
- 礦山治理專項研究報告范文
評論
0/150
提交評論