資源描述:
《編譯原理-語(yǔ)法制導(dǎo)翻譯技術(shù)與中間代碼生成ppt課件.ppt》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫(kù)。
1、本章主要介紹:語(yǔ)法制導(dǎo)翻譯法的基本思想常見(jiàn)的幾種中間代碼的形式各種不同語(yǔ)法結(jié)構(gòu)的語(yǔ)法制導(dǎo)翻譯技術(shù)第五章語(yǔ)法制導(dǎo)翻譯技術(shù)和中間代碼生成靜態(tài)語(yǔ)義審查審查每個(gè)語(yǔ)法結(jié)構(gòu)的靜態(tài)語(yǔ)義,即驗(yàn)證語(yǔ)法結(jié)構(gòu)合法的程序,是否真正有意義。5.1概述如果靜態(tài)語(yǔ)義正確,語(yǔ)義處理則要執(zhí)行真正的翻譯,即生成程序的某種中間代碼的形式或直接生成目標(biāo)代碼。執(zhí)行真正的翻譯(1)屬性對(duì)文法的每一個(gè)符號(hào),引進(jìn)一些屬性,這些屬性代表與文法符號(hào)相關(guān)的信息,如類(lèi)型、值、存儲(chǔ)位置等。與屬性相關(guān)的信息,即屬性值,可以在語(yǔ)法分析過(guò)程中計(jì)算和傳遞。1.屬性文法5.2屬性文法屬性分為
2、兩類(lèi):綜合屬性其計(jì)算規(guī)則按“自下而上”方式進(jìn)行,即規(guī)則左部符號(hào)的某些屬性根據(jù)其右部符號(hào)的屬性和(或)自己的其他屬性計(jì)算而得。屬性加工的過(guò)程即是語(yǔ)義的處理過(guò)程。綜合屬性和繼承屬性。E→E(1)+E(2){E.val=E(1).val+E(2).val}5.2屬性文法繼承屬性其計(jì)算規(guī)則按“自上而下”方式進(jìn)行,即規(guī)則右部符號(hào)的某些屬性根據(jù)其左部符號(hào)的屬性和(或)右部其他符號(hào)的某些屬性計(jì)算而得。D→TL{L.in=T.type}T→int{T.type=integer}T→real{T.type=real}L→L(1),id{L(1)
3、.in=L.in;Fill(id.entry,L.in)}L→id{Fill(id.entry,L.in)}5.2屬性文法(2)屬性文法為文法的每一個(gè)規(guī)則配備的計(jì)算屬性的計(jì)算規(guī)則,稱(chēng)為語(yǔ)義規(guī)則(描述語(yǔ)義處理的加工動(dòng)作)。屬性文法包含一個(gè)上下文無(wú)關(guān)文法和一系列語(yǔ)義規(guī)則。語(yǔ)義規(guī)則:屬性加工的過(guò)程即是語(yǔ)義的處理過(guò)程5.2屬性文法語(yǔ)法制導(dǎo)翻譯法的基本思想為文法的每個(gè)產(chǎn)生式都配備一個(gè)語(yǔ)義動(dòng)作或語(yǔ)義子程序。在語(yǔ)法分析的過(guò)程中,每當(dāng)使用一條產(chǎn)生式進(jìn)行推導(dǎo)或歸約時(shí),就執(zhí)行相應(yīng)產(chǎn)生式的語(yǔ)義動(dòng)作,從而實(shí)現(xiàn)語(yǔ)義處理。E→E(1)+E(2){E.va
4、l=E(1).val+E(2).val}5.3語(yǔ)法制導(dǎo)翻譯概述(語(yǔ)義子程序)描述了一個(gè)產(chǎn)生式所對(duì)應(yīng)的翻譯工作。語(yǔ)義動(dòng)作語(yǔ)義動(dòng)作不僅指明了該產(chǎn)生式所產(chǎn)生符號(hào)串的意義,而且還根據(jù)這種意義規(guī)定了對(duì)應(yīng)的加工動(dòng)作(如查填各類(lèi)表格、改變編譯程序的某些變量的值、打印各種錯(cuò)誤信息及生成中間代碼等),從而完成預(yù)定的翻譯工作。5.3語(yǔ)法制導(dǎo)翻譯概述語(yǔ)法制導(dǎo)翻譯法在語(yǔ)法分析過(guò)程中,依隨分析的過(guò)程,根據(jù)每個(gè)產(chǎn)生式所對(duì)應(yīng)的語(yǔ)義子程序(語(yǔ)義規(guī)則描述的語(yǔ)義處理的加工動(dòng)作)進(jìn)行翻譯的方法。5.3語(yǔ)法制導(dǎo)翻譯概述為文法每一產(chǎn)生式設(shè)計(jì)相應(yīng)的求值的語(yǔ)義描述(語(yǔ)義動(dòng)
5、作):例如,設(shè)有簡(jiǎn)單算術(shù)表達(dá)式的文法:E→E+E
6、E*E
7、(E)
8、digit1.E→E(1)+E(2){E.val=E(1).val+E(2).val}2.E→E(1)*E(2){E.val=E(1).val*E(2).val}3.E→(E(1)){E.val=E(1).val}4.E→digit{E.val=Lex.digit}{7+8*5,3+8,6*5,…}5.3語(yǔ)法制導(dǎo)翻譯概述E.val=47E.val=8E.val=40E.val=7E.val=5+5*871.E→E(1)+E(2){E.val=E(1).val+E
9、(2).val}2.E→E(1)*E(2){E.val=E(1).val*E(2).val}3.E→(E(1)){E.val=E(1).val}4.E→digit{E.val=Lex.digit}句子7+8*5EEEEE5.3語(yǔ)法制導(dǎo)翻譯概述語(yǔ)法制導(dǎo)翻譯技術(shù)分為:自底向上語(yǔ)法制導(dǎo)翻譯自頂向下語(yǔ)法制導(dǎo)翻譯5.3語(yǔ)法制導(dǎo)翻譯概述LR分析制導(dǎo)的具體實(shí)現(xiàn)方法:為文法的每一個(gè)產(chǎn)生式設(shè)計(jì)相應(yīng)的語(yǔ)義動(dòng)作為文法構(gòu)造LR分析表5.3語(yǔ)法制導(dǎo)翻譯概述擴(kuò)充LR分析棧,以便存放文法符號(hào)對(duì)應(yīng)的語(yǔ)義值語(yǔ)義值棧狀態(tài)棧文法符號(hào)棧S0$—S1X1X1.valS
10、kXkXk.val.........修改總控程序:查分析表,當(dāng)用某產(chǎn)生式歸約時(shí),調(diào)用相應(yīng)的語(yǔ)義動(dòng)作5.3語(yǔ)法制導(dǎo)翻譯概述例如,設(shè)有簡(jiǎn)單算術(shù)表達(dá)式的文法:E→E+E
11、E*E
12、(E)
13、digit1.E→E(1)+E(2){E.val=E(1).val+E(2).val}2.E→E(1)*E(2){E.val=E(1).val*E(2).val}3.E→(E(1)){E.val=E(1).val}4.E→digit{E.val=Lex.digit}為文法每一產(chǎn)生式設(shè)計(jì)相應(yīng)的語(yǔ)義動(dòng)作(求值的語(yǔ)義描述):5.3語(yǔ)法制導(dǎo)翻譯概述2.為上述
14、文法構(gòu)造LR分析表如下圖:90狀態(tài)ACTIONGOTO+digit*()$ES3S9S5S4S2S3S2S3S5S4S2S5S2S3r4r4r4r4r1r1r1r2r3r2r3r3r2r2r3123456781678acc5.3語(yǔ)法制導(dǎo)翻譯概述自下而上語(yǔ)法制導(dǎo)翻譯法的特點(diǎn):語(yǔ)