編譯原理實用教程 楊德芳 第10章 符號表和錯誤處理

編譯原理實用教程 楊德芳 第10章 符號表和錯誤處理

ID:40336232

大?。?15.50 KB

頁數(shù):55頁

時間:2019-07-31

編譯原理實用教程 楊德芳 第10章 符號表和錯誤處理_第1頁
編譯原理實用教程 楊德芳 第10章 符號表和錯誤處理_第2頁
編譯原理實用教程 楊德芳 第10章 符號表和錯誤處理_第3頁
編譯原理實用教程 楊德芳 第10章 符號表和錯誤處理_第4頁
編譯原理實用教程 楊德芳 第10章 符號表和錯誤處理_第5頁
資源描述:

《編譯原理實用教程 楊德芳 第10章 符號表和錯誤處理》由會員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫。

1、第10章符號表和錯誤處理本章學(xué)習(xí)目標(biāo)為了檢查語義的正確性和生成代碼,需要知道源程序中所使用的各種標(biāo)識符的屬性。這些屬性常常由編譯程序集中起來并存放在一個標(biāo)識符表或符號表中。本章的主要內(nèi)容有:符號表的組織和內(nèi)容符號表的構(gòu)造和查找分程序的結(jié)構(gòu)10.1符號表的組織和內(nèi)容在編譯的各個階段經(jīng)常要收集和使用出現(xiàn)在源程序中的各種信息,為了方便,通常把這些信息用一些表格進(jìn)行記錄、存儲和管理,如常量表、數(shù)組信息表、保留字表和標(biāo)識符表等,這些表統(tǒng)稱為符號表。符號表主要保存各類標(biāo)識符的屬性,它在翻譯過程中有兩個方面的重要作

2、用,一是檢查語義的正確性,二是輔助生成代碼。也就是說在實現(xiàn)語義檢查和代碼生成時,需要不斷插入和檢索符號表中標(biāo)識符的屬性來實現(xiàn)。在進(jìn)行詞法分析時,從字符串源程序中分離出標(biāo)識符后,首先檢查保留字表,如果在保留字表中沒有,就是標(biāo)識符,詞法分析程序就輸出標(biāo)識符符號,同時記住該標(biāo)識符符號和屬性值。在編譯時,源程序中每出現(xiàn)一次標(biāo)識符,就要和符號表打一次交道,主要工作是查表和存取操作,因此與符號表交互占據(jù)了大量的編譯時間。所以如何有效地組織和快速查找符號表直接影響編譯的效率。符號表可以在詞法分析時創(chuàng)建,也可以在語義

3、分析時創(chuàng)建。在編譯程序中,符號表在詞法分析時創(chuàng)建,此時符號表中只含有標(biāo)識符的名字,其他屬性要在語義分析階段填入。而變量在符號表中的位置信息將作為標(biāo)識符符號的屬性出現(xiàn),構(gòu)成詞法分析器所產(chǎn)生的單詞符號的一部分;語法分析階段只檢查源程序語法的正確性,一般不使用符號表;語義分析程序?qū)υ摼幋a形式進(jìn)行語義正確性分析,遇到聲明語句時會填入有關(guān)標(biāo)識符的屬性。在符號表中的標(biāo)識符的屬性信息會在代碼生成階段用于產(chǎn)生目標(biāo)代碼。因此,直到語義分析和代碼生成階段,許多與變量有關(guān)的屬性才能相繼填入符號表。10.1.2符號表的組織在

4、編譯程序中,符號表主要用來存放源程序中各種有用的信息。在編譯階段要不斷對這些信息進(jìn)行訪問、增加和更新。因此,需要合理組織符號表使符號表占用盡量少的內(nèi)存空間,同時還要提高訪問符號表的效率。符號表中具體需要設(shè)計哪些屬性也部分的取決于程序設(shè)計語言的特點(diǎn)。1.表的屬性(1)標(biāo)識符的名字。一個標(biāo)識符可以是一個變量的名字、一個函數(shù)的名字或一個過程的名字。(2)符號的類型。除過程標(biāo)識符之外的函數(shù)和變量都具有數(shù)據(jù)類型。(3)符號的存儲類別。大多數(shù)語言的存儲類別有兩種方式,一種是公共存儲區(qū)的變量,另一種是私有存儲變量。

5、(4)符號的作用域及可視性。一個符號變量在程序中起作用的范圍,稱為作用域。一般來講,定義該符號的位置及存儲類關(guān)鍵字決定了該符號的作用域。但是在出現(xiàn)函數(shù)的形式參數(shù)和分程序的時候,就要考慮可視性的問題。關(guān)于變量的作用域和可視性可以結(jié)合C語言進(jìn)行考慮。inta;intfunc(a,b)floata;intb;{…a/*此時的a為形式參數(shù)的a*/…}分程序的情況:…{inta;…{chara;…{floata;…}…a…//引用的是chara;//}}(5)符號變量的存儲分配信息。通常一個編譯程序有兩類存儲區(qū)

6、,即靜態(tài)存儲區(qū)和動態(tài)存儲區(qū)。(6)符號表的其他屬性符號表還有其它方面的重要信息。1)數(shù)組的內(nèi)情向量在程序設(shè)計語言中,數(shù)組是一種重要的數(shù)據(jù)類型。編譯程序處理數(shù)組主要是把數(shù)組的內(nèi)情向量表登錄在符號表中,這些屬性信息確定了存儲分配時數(shù)組占據(jù)多大的內(nèi)存空間。2)記錄結(jié)構(gòu)型的成員信息。一個結(jié)構(gòu)體類型的變量,是由若干成員項組成的,因此記錄類型的變量在存儲空間的大小是由它的成員項來決定。3)函數(shù)及過程的形參。函數(shù)和過程的形參作為函數(shù)或過程的局部變量,又是對外的接口。因此,形式參數(shù)的個數(shù)、排列次序和類型都必須反映在符

7、號表中。它還是過程調(diào)用和語義檢查的依據(jù)。名字目標(biāo)地址類型維數(shù)聲明行引用行指針omputer02129,4,57X1410312,140FORM83246B2481051ANS521054M566062FIRST641073(1)名字。就是指標(biāo)識符的名字屬性。(2)目標(biāo)地址。標(biāo)識符主要做變量的名字,程序中每個變量都必須有一個相應(yīng)的目標(biāo)地址,該地址是為該變量分配的相對內(nèi)存地址。當(dāng)聲明一個變量時,就要為該變量分配內(nèi)存空間,并將其分配的地址填入符號表中。當(dāng)該變量在程序的其他處被引用時,可以從符號表中查詢該變量

8、,并填入存取該變量值的目標(biāo)代碼中。對于采用靜態(tài)存儲分配的語言如FORTRAN,地址是連續(xù)分配的。對于采用動態(tài)存儲分配的語言,每個程序塊的變量是連續(xù)分配的,這是一個相對地址。運(yùn)行時還要根據(jù)該程序塊分配的數(shù)據(jù)區(qū)的起始地址和變量的相對地址計算出該變量的絕對內(nèi)存地址。如果標(biāo)識符表示的是函數(shù)名,則目標(biāo)地址就是該函數(shù)代碼的起始地址,是數(shù)組名則為數(shù)組模板的起始地址。(3)類型。不同數(shù)據(jù)類型的變量占據(jù)不同大小的內(nèi)存空間,另外類型檢查是語義分析的一項重要工作,所以符號表中

當(dāng)前文檔最多預(yù)覽五頁,下載文檔查看全文

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

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