資源描述:
《語(yǔ)法制導(dǎo)翻譯和中間代碼生成課件.ppt》由會(huì)員上傳分享,免費(fèi)在線(xiàn)閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫(kù)。
1、第六章 語(yǔ)法制導(dǎo)翻譯和中間代碼生成第一節(jié)屬性文法第二節(jié)語(yǔ)法制導(dǎo)翻譯概論第三節(jié)中間代碼的形式第四節(jié)簡(jiǎn)單賦值語(yǔ)句的翻譯第五節(jié)布爾表達(dá)式的翻譯第六節(jié)控制結(jié)構(gòu)的翻譯第七節(jié)說(shuō)明語(yǔ)句的翻譯第八節(jié)數(shù)組和結(jié)構(gòu)的翻譯6.1屬性文法編譯中的語(yǔ)義處理是指兩個(gè)功能:審查每個(gè)語(yǔ)法結(jié)構(gòu)的靜態(tài)語(yǔ)義,即驗(yàn)證語(yǔ)法結(jié)構(gòu)合法的程序是否真正有意義(靜態(tài)語(yǔ)義分析/靜態(tài)審查)如果靜態(tài)語(yǔ)義正確,語(yǔ)義處理的工作是要執(zhí)行真正的翻譯,即生成中間代碼或目標(biāo)代碼有的編譯程序直接生成目標(biāo)代碼,有的編譯程序程序采用中間代碼(中間語(yǔ)言)(它是復(fù)雜性介于源程序語(yǔ)言和機(jī)器語(yǔ)言的一種表示形式)第八章 語(yǔ)法制導(dǎo)翻譯和中間代碼生成語(yǔ)法制導(dǎo)翻譯是
2、指在語(yǔ)法分析過(guò)程中,完成附加在所使用的產(chǎn)生式上的語(yǔ)義規(guī)則描述的動(dòng)作屬性,常用以描述事物或人的特征、性質(zhì)、品質(zhì)等,對(duì)編譯程序使用的語(yǔ)法樹(shù)的結(jié)點(diǎn),可以用類(lèi)型、值或存儲(chǔ)位置來(lái)描述它一個(gè)屬性文法是一個(gè)三元組A=(G,V,F(xiàn)):G:一個(gè)上下文無(wú)關(guān)文法V:一個(gè)屬性的有窮集F:關(guān)于屬性的斷言或謂詞的有窮集編譯程序的靜態(tài)語(yǔ)義審查工作就是驗(yàn)證關(guān)于所編譯的程序的斷言是否全部為真例如文法G為:ET1+T2
3、T1orT2Tnum
4、true
5、false對(duì)輸入串3+4的語(yǔ)法樹(shù)如圖6.1:屬性文法記號(hào)中常使用N·t的形式表示與非終結(jié)符N相聯(lián)的屬性t比如可把完成對(duì)上面表達(dá)式的類(lèi)型檢查的屬性文法寫(xiě)成圖6.2
6、的形式:屬性文法最最由克努特(D.E.Knuth)提出,他把屬性分成:繼承屬性、綜合屬性屬性文法中,對(duì)應(yīng)于每個(gè)產(chǎn)生式Aa都有一套與之相關(guān)聯(lián)的語(yǔ)義規(guī)則,每條規(guī)則的形式為b:=f(c1,c2,…,ck)。f是一個(gè)函數(shù),b和c1,c2,…,ck是該產(chǎn)生式文法符號(hào)的屬性(1)如果b是A的一個(gè)屬性,c1,c2,…,ck是產(chǎn)生式右部文法符號(hào)的屬性或A的其他屬性,則稱(chēng)b是A的綜合屬性(2)如果b是產(chǎn)生式右部某個(gè)文法符號(hào)X的一個(gè)屬性,并且c1,c2,…,ck是A或產(chǎn)生式右邊任何文法符號(hào)的屬性,則稱(chēng)b是文法符號(hào)X的繼承屬性在兩種情況下,我們說(shuō)屬性b依賴(lài)于屬性c1,c2,…,ck(1)非終結(jié)符
7、既可有綜合屬性也可有繼承屬性,但文法開(kāi)始符號(hào)沒(méi)有繼承屬性(2)終結(jié)符只有綜合屬性,它們由詞法程序提供例6.1中,E、T和F的val屬性是綜合屬性,例8.2中的L的in是繼承屬性例6.1簡(jiǎn)單算術(shù)表達(dá)式求值的語(yǔ)義描述:產(chǎn)生式 語(yǔ)義規(guī)則(0)LEprint(E,val)(1)EE+TE.val:=E1.val+T.val(2)ETE.val:=T.val(3)TT1*FT.val:=T1.val×F.val(4)TFT.val:=E.val(5)F(E)F.val:=E.val(6)FdigitF.val:=digit.lexval例6.2描述說(shuō)明語(yǔ)句中各種變量
8、的類(lèi)型信息的語(yǔ)義規(guī)則:產(chǎn)生式 語(yǔ)義規(guī)則(1)DTLL.in:=T.type(2)TintT.type:=integer(3)TrealT.type:=real(4)LL1,idL1.in:=L.in(5)Lidaddtype(id.entry,L.in)圖6.3是句子intid1,id2的語(yǔ)法樹(shù),使用 表示屬性的傳遞情況6.2語(yǔ)法制導(dǎo)翻譯概論基于屬性文法的處理過(guò)程(語(yǔ)法制導(dǎo)翻譯):對(duì)單詞符號(hào)串進(jìn)行語(yǔ)法分析,構(gòu)造語(yǔ)法分析樹(shù),然后根據(jù)需要構(gòu)造屬性依賴(lài)圖,遍歷語(yǔ)法樹(shù)并在語(yǔ)法樹(shù)的各結(jié)點(diǎn)處按語(yǔ)義規(guī)則進(jìn)行計(jì)算一.計(jì)算語(yǔ)義規(guī)則所謂依賴(lài)圖是一個(gè)有向圖,用于描述分析樹(shù)中的
9、屬性和屬性間的相互依賴(lài)關(guān)系依賴(lài)圖的構(gòu)造算法如下:for分析樹(shù)中每一個(gè)結(jié)點(diǎn)ndofor結(jié)點(diǎn)的文法符號(hào)的每一個(gè)屬性ado為a在依賴(lài)圖中建立一個(gè)結(jié)點(diǎn);for分析樹(shù)中每一個(gè)結(jié)點(diǎn)ndofor結(jié)點(diǎn)n所用產(chǎn)生式對(duì)應(yīng)的每一個(gè)語(yǔ)義規(guī)則b:=f(c1,c2,…,ck)dofori:=1tokdo從ci結(jié)點(diǎn)到b結(jié)點(diǎn)構(gòu)造一條有向邊例6.2的句子Realid1,id2,id3分析樹(shù)的依賴(lài)圖(圖中的結(jié)點(diǎn)用數(shù)字表示)如圖6.4:從依賴(lài)圖的拓?fù)渑判蛑?,可以得到所有?jì)算語(yǔ)義規(guī)則的順序。用這個(gè)順序來(lái)計(jì)算語(yǔ)義規(guī)則就得到輸入符號(hào)串的翻譯屬性計(jì)算有樹(shù)遍歷的和一遍掃描的方法二.S-屬性文法和自下而上翻譯S-屬性文法是
10、只含有綜合屬性的屬性文法綜合屬性可 在分析輸入符號(hào)串的同時(shí)自下而上來(lái)計(jì)算S-屬性文法的翻譯器通??山柚贚R分析器實(shí)現(xiàn)分析器可以保存與棧中文法符號(hào)有關(guān)的綜合屬性值,每當(dāng)進(jìn)行歸約時(shí),新的屬性值就由棧中正在歸約的產(chǎn)生式右邊符號(hào)的屬性值來(lái)計(jì)算對(duì)例6.1的輸入串2+3*5語(yǔ)法樹(shù)如圖6.5:三.L-屬性文法在自上而下分析中的實(shí)現(xiàn)一個(gè)屬性文法稱(chēng)為L(zhǎng)-屬性文法,如果對(duì)于每個(gè)產(chǎn)生式AX1X2…Xn,其每個(gè)語(yǔ)義規(guī)則中的每個(gè)屬性或者是綜合屬性,或者是Xj(1≤j≤n)的一個(gè)繼承屬性且這個(gè)繼承屬性?xún)H依賴(lài)于:(1)產(chǎn)生式Xj在左邊符號(hào)X1