編譯原理實用教程 楊德芳 第7章 語法制導翻譯和中間代碼

編譯原理實用教程 楊德芳 第7章 語法制導翻譯和中間代碼

ID:40336240

大小:919.50 KB

頁數(shù):106頁

時間:2019-07-31

編譯原理實用教程 楊德芳 第7章 語法制導翻譯和中間代碼_第1頁
編譯原理實用教程 楊德芳 第7章 語法制導翻譯和中間代碼_第2頁
編譯原理實用教程 楊德芳 第7章 語法制導翻譯和中間代碼_第3頁
編譯原理實用教程 楊德芳 第7章 語法制導翻譯和中間代碼_第4頁
編譯原理實用教程 楊德芳 第7章 語法制導翻譯和中間代碼_第5頁
資源描述:

《編譯原理實用教程 楊德芳 第7章 語法制導翻譯和中間代碼》由會員上傳分享,免費在線閱讀,更多相關內(nèi)容在教育資源-天天文庫。

1、第7章語法制導翻譯和中間代碼生成學習目標任何編譯程序都可以看作是這樣的一個翻譯程序:它將用某種源語言寫的源程序轉(zhuǎn)換為等價的用某種目標語言寫的程序(目標程序),其中的目標程序可以是某種中間的語言程序。語法制導翻譯的基本思想是很簡單的,就是先給文法中的每個產(chǎn)生式添加一個成分,這個成分稱為語義動作或翻譯子程序。在執(zhí)行語法分析的同時,執(zhí)行相應產(chǎn)生式的語義動作。這些語義動作不僅指明了該產(chǎn)生式所生成的符號串的意義,而且根據(jù)這種意義規(guī)定了對應的加工動作。本章要點:語法制導翻譯中間代碼的形式各種語句的翻譯例題7.1給出文法及其語義子程序(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)部值*/計算算術表達式7+9*5#的語法值及各結(jié)點的值。表7-1表達式7+9*5#的語義分析步驟狀態(tài)棧符號棧語義棧輸入串主要動作10#-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概述如同在進行詞法分析、語法分析的同時也進行著詞法檢查、語法檢查一樣,在語義分析時也必然進行語義檢查。語義分析包括動態(tài)語義分析和靜態(tài)語義分析兩類。動態(tài)語義分析就是進行真正的翻譯,即生成程序的一種中間表示形式(中間代碼)或需要生成相應的目標代碼,它是運行時進行的;靜態(tài)語義分析是在

4、編譯時完成的,它涉及到幾個方面:7.1.1語義分析的概念(1)類型檢查,如參與運算的操作數(shù)其類型應相容。(2)控制類檢查,以保證控制語句有合法的轉(zhuǎn)向點。如C語言中不允許goto語句轉(zhuǎn)入case語句流。Break語句需要尋找包含它的最小的switch、while或for語句方可找到轉(zhuǎn)向點,否則出錯。(3)一致性檢查,如在相同作用域中標識符只能說明一次,case語句的標識不能相同等。7.1.2語法制導翻譯語法制導翻譯的方法就是為每個產(chǎn)生式配上一個翻譯子程序(稱為語義動作或語義子程序),并在語法分析的同時執(zhí)行這些子程序。語義動作是為產(chǎn)生式賦予具體意義

5、的手段,它一方面指出了一個產(chǎn)生式所產(chǎn)生的符號串的意義;另一方面又按照這種意義規(guī)定了生成某種中間代碼應做哪些基本動作。在語法分析過程中,當一個產(chǎn)生式獲得匹配或用于歸約時,此產(chǎn)生式相應的語義子程序就進入工作,完成即定的翻譯任務。語法制導翻譯分為自底向上語法制導翻譯和自頂向下的語法制導翻譯。狀態(tài)文法符號語義值S0S1SK#X1XKV1.valVk.val???—TOP圖7-1擴充的LR分析棧E.val=52E.val=7+E.val=457E.val=9*E.,val=595圖7-2語法制導翻譯計算表達式7+9*5#的語法樹7.2屬性文法屬性是指與文

6、法符號的類型和值等有關的信息。在編譯中用屬性描述處理對象的特征。隨著編譯的進展,對語法分析產(chǎn)生的語法樹進行語義分析,且分析的結(jié)果用中間代碼描述出來。對于一棵等待翻譯的語法樹,它的各個結(jié)點都是文法中的一個符號X,該X可以是終結(jié)符或非終結(jié)符。根據(jù)語義處理的需要,在用產(chǎn)生式A→?X?進行歸約或推導時,應能夠準確而恰當?shù)乇磉_文法符號X在歸約或推導時的不同的特征。例如,判斷X的類型是否匹配,要用X的數(shù)據(jù)類型來描述;因此,在語義分析階段引入X的屬性,如X.type、X.place、X.val等分別描述變量X的類型、存儲位置及值的不同特征。文法符號的屬性可以

7、分為繼承屬性與綜合屬性兩大類。繼承屬性用于“自上而下”傳遞信息。繼承屬性由相應語法樹中的結(jié)點的父結(jié)點屬性計算得到,即沿語法樹向下傳遞,由根結(jié)點到分枝結(jié)點,它反映了對上下文依賴的特性。繼承屬性可以很方便地用來表示程序語言上下文的結(jié)構(gòu)關系。綜合屬性用于“自下而上”傳遞信息。綜合屬性由相應語法分析樹中結(jié)點的分支結(jié)點屬性計算得到,其傳遞方向與繼承屬性相反,即沿語法分析樹向上傳遞,從分枝結(jié)點到根結(jié)點。7.2.2屬性文法屬性文法是一種適應于定義語義的特殊文法,即在語言的文法中增加了屬性的文法。它將文法符號的語義以“屬性”的形式附加到各個文法的符號上。再根據(jù)

8、產(chǎn)生式所包含的含義,給出每個文法符號屬性的求值規(guī)則,從而形成一種帶有語義屬性的上下問無關文法,即屬性文法。屬性文法也是一種翻譯文法,屬性有助于更詳細地

當前文檔最多預覽五頁,下載文檔查看全文

此文檔下載收益歸作者所有

當前文檔最多預覽五頁,下載文檔查看全文
溫馨提示:
1. 部分包含數(shù)學公式或PPT動畫的文件,查看預覽時可能會顯示錯亂或異常,文件下載后無此問題,請放心下載。
2. 本文檔由用戶上傳,版權歸屬用戶,天天文庫負責整理代發(fā)布。如果您對本文檔版權有爭議請及時聯(lián)系客服。
3. 下載前請仔細閱讀文檔內(nèi)容,確認文檔內(nèi)容符合您的需求后進行下載,若出現(xiàn)內(nèi)容與標題不符可向本站投訴處理。
4. 下載文檔時可能由于網(wǎng)絡波動等原因無法下載或下載錯誤,付費完成后未能成功下載的用戶請聯(lián)系客服處理。