資源描述:
《編譯原理實(shí)用教程 楊德芳 第7章 語(yǔ)法制導(dǎo)翻譯和中間代碼》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫(kù)。
1、第7章語(yǔ)法制導(dǎo)翻譯和中間代碼生成學(xué)習(xí)目標(biāo)任何編譯程序都可以看作是這樣的一個(gè)翻譯程序:它將用某種源語(yǔ)言寫的源程序轉(zhuǎn)換為等價(jià)的用某種目標(biāo)語(yǔ)言寫的程序(目標(biāo)程序),其中的目標(biāo)程序可以是某種中間的語(yǔ)言程序。語(yǔ)法制導(dǎo)翻譯的基本思想是很簡(jiǎn)單的,就是先給文法中的每個(gè)產(chǎn)生式添加一個(gè)成分,這個(gè)成分稱為語(yǔ)義動(dòng)作或翻譯子程序。在執(zhí)行語(yǔ)法分析的同時(shí),執(zhí)行相應(yīng)產(chǎn)生式的語(yǔ)義動(dòng)作。這些語(yǔ)義動(dòng)作不僅指明了該產(chǎn)生式所生成的符號(hào)串的意義,而且根據(jù)這種意義規(guī)定了對(duì)應(yīng)的加工動(dòng)作。本章要點(diǎn):語(yǔ)法制導(dǎo)翻譯中間代碼的形式各種語(yǔ)句的翻譯例題7.1給出文法及其語(yǔ)義子程序(0)S′→Eprint
2、val[top](1)E→E(1)+E(2)val[top]=val[top]+val[top+2](2)E→E(1)*E(2)val[top]=val[top]*val[top+2](3)E→(E(1))val[top]=val[top+1](4)E→ival[top]=lexval/*LEXVAL為i的整型內(nèi)部值*/計(jì)算算術(shù)表達(dá)式7+9*5#的語(yǔ)法值及各結(jié)點(diǎn)的值。表7-1表達(dá)式7+9*5#的語(yǔ)義分析步驟狀態(tài)棧符號(hào)棧語(yǔ)義棧輸入串主要?jiǎng)幼?0#-7+9*5#S3203#7――+9*5#r4301#E—7+9*5#S44014#E+—7—9*5#
3、S350143#E+9—7——*5#r460147#E+E—7—9*5#S5701475#E+E*—7—9-5#S38014753#E+E*5—7—9--#r49014758#E+E*E—7—9—5#r2100147#E+E—7—45#r11101#E—52#acc7.1概述如同在進(jìn)行詞法分析、語(yǔ)法分析的同時(shí)也進(jìn)行著詞法檢查、語(yǔ)法檢查一樣,在語(yǔ)義分析時(shí)也必然進(jìn)行語(yǔ)義檢查。語(yǔ)義分析包括動(dòng)態(tài)語(yǔ)義分析和靜態(tài)語(yǔ)義分析兩類。動(dòng)態(tài)語(yǔ)義分析就是進(jìn)行真正的翻譯,即生成程序的一種中間表示形式(中間代碼)或需要生成相應(yīng)的目標(biāo)代碼,它是運(yùn)行時(shí)進(jìn)行的;靜態(tài)語(yǔ)義分析是在
4、編譯時(shí)完成的,它涉及到幾個(gè)方面:7.1.1語(yǔ)義分析的概念(1)類型檢查,如參與運(yùn)算的操作數(shù)其類型應(yīng)相容。(2)控制類檢查,以保證控制語(yǔ)句有合法的轉(zhuǎn)向點(diǎn)。如C語(yǔ)言中不允許goto語(yǔ)句轉(zhuǎn)入case語(yǔ)句流。Break語(yǔ)句需要尋找包含它的最小的switch、while或for語(yǔ)句方可找到轉(zhuǎn)向點(diǎn),否則出錯(cuò)。(3)一致性檢查,如在相同作用域中標(biāo)識(shí)符只能說(shuō)明一次,case語(yǔ)句的標(biāo)識(shí)不能相同等。7.1.2語(yǔ)法制導(dǎo)翻譯語(yǔ)法制導(dǎo)翻譯的方法就是為每個(gè)產(chǎn)生式配上一個(gè)翻譯子程序(稱為語(yǔ)義動(dòng)作或語(yǔ)義子程序),并在語(yǔ)法分析的同時(shí)執(zhí)行這些子程序。語(yǔ)義動(dòng)作是為產(chǎn)生式賦予具體意義
5、的手段,它一方面指出了一個(gè)產(chǎn)生式所產(chǎn)生的符號(hào)串的意義;另一方面又按照這種意義規(guī)定了生成某種中間代碼應(yīng)做哪些基本動(dòng)作。在語(yǔ)法分析過(guò)程中,當(dāng)一個(gè)產(chǎn)生式獲得匹配或用于歸約時(shí),此產(chǎn)生式相應(yīng)的語(yǔ)義子程序就進(jìn)入工作,完成即定的翻譯任務(wù)。語(yǔ)法制導(dǎo)翻譯分為自底向上語(yǔ)法制導(dǎo)翻譯和自頂向下的語(yǔ)法制導(dǎo)翻譯。狀態(tài)文法符號(hào)語(yǔ)義值S0S1SK#X1XKV1.valVk.val???—TOP圖7-1擴(kuò)充的LR分析棧E.val=52E.val=7+E.val=457E.val=9*E.,val=595圖7-2語(yǔ)法制導(dǎo)翻譯計(jì)算表達(dá)式7+9*5#的語(yǔ)法樹(shù)7.2屬性文法屬性是指與文
6、法符號(hào)的類型和值等有關(guān)的信息。在編譯中用屬性描述處理對(duì)象的特征。隨著編譯的進(jìn)展,對(duì)語(yǔ)法分析產(chǎn)生的語(yǔ)法樹(shù)進(jìn)行語(yǔ)義分析,且分析的結(jié)果用中間代碼描述出來(lái)。對(duì)于一棵等待翻譯的語(yǔ)法樹(shù),它的各個(gè)結(jié)點(diǎn)都是文法中的一個(gè)符號(hào)X,該X可以是終結(jié)符或非終結(jié)符。根據(jù)語(yǔ)義處理的需要,在用產(chǎn)生式A→?X?進(jìn)行歸約或推導(dǎo)時(shí),應(yīng)能夠準(zhǔn)確而恰當(dāng)?shù)乇磉_(dá)文法符號(hào)X在歸約或推導(dǎo)時(shí)的不同的特征。例如,判斷X的類型是否匹配,要用X的數(shù)據(jù)類型來(lái)描述;因此,在語(yǔ)義分析階段引入X的屬性,如X.type、X.place、X.val等分別描述變量X的類型、存儲(chǔ)位置及值的不同特征。文法符號(hào)的屬性可以
7、分為繼承屬性與綜合屬性兩大類。繼承屬性用于“自上而下”傳遞信息。繼承屬性由相應(yīng)語(yǔ)法樹(shù)中的結(jié)點(diǎn)的父結(jié)點(diǎn)屬性計(jì)算得到,即沿語(yǔ)法樹(shù)向下傳遞,由根結(jié)點(diǎn)到分枝結(jié)點(diǎn),它反映了對(duì)上下文依賴的特性。繼承屬性可以很方便地用來(lái)表示程序語(yǔ)言上下文的結(jié)構(gòu)關(guān)系。綜合屬性用于“自下而上”傳遞信息。綜合屬性由相應(yīng)語(yǔ)法分析樹(shù)中結(jié)點(diǎn)的分支結(jié)點(diǎn)屬性計(jì)算得到,其傳遞方向與繼承屬性相反,即沿語(yǔ)法分析樹(shù)向上傳遞,從分枝結(jié)點(diǎn)到根結(jié)點(diǎn)。7.2.2屬性文法屬性文法是一種適應(yīng)于定義語(yǔ)義的特殊文法,即在語(yǔ)言的文法中增加了屬性的文法。它將文法符號(hào)的語(yǔ)義以“屬性”的形式附加到各個(gè)文法的符號(hào)上。再根據(jù)
8、產(chǎn)生式所包含的含義,給出每個(gè)文法符號(hào)屬性的求值規(guī)則,從而形成一種帶有語(yǔ)義屬性的上下問(wèn)無(wú)關(guān)文法,即屬性文法。屬性文法也是一種翻譯文法,屬性有助于更詳細(xì)地