資源描述:
《符號表與錯誤處理.ppt》由會員上傳分享,免費在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫。
1、第8章符號表與錯誤處理8.1符號表8.2錯誤處理8.1符號表8.1.1符號表的作用在編譯程序工作的過程中,需要不斷收集、記錄、查證和使用源程序中一些語法符號的類型與特征等相關(guān)信息。一般的做法是讓編譯程序在其工作過程中建立并保存一批表格,如常數(shù)表、變量名表、數(shù)組內(nèi)情向量表、過程或子程序名表及標(biāo)號表等,將它們統(tǒng)稱為符號表或名字表。符號表中的每一項包括兩個部分:(1)名字(標(biāo)識符)(2)與名字有關(guān)的信息這些信息將全面地反映各個語法符號的屬性,以及它們在編譯過程中的特征,諸如名字的種屬(常數(shù)、變量、數(shù)組、標(biāo)號等)、類型(整型、實型、邏輯型、字符型等)、特征(當(dāng)前是定義性
2、出現(xiàn)還是使用性出現(xiàn)等)、分配的存儲單元地址及與此名語義有關(guān)的其它信息等。根據(jù)編譯程序工作階段的不同劃分,符號表中的各種信息將在編譯程序工作過程中的適當(dāng)時候填入。詞法分析階段:建立符號表,與此名相關(guān)的其它信息,分別在語法分析、語義分析及中間代碼生成等階段陸續(xù)填入。語義分析階段:符號表中的信息可以用于語義檢查。代碼優(yōu)化階段:編譯程序利用符號表提供的信息選出恰當(dāng)?shù)拇a進行優(yōu)化。標(biāo)代碼生成階段:編譯程序?qū)⒁罁?jù)符號表中的符號名來分配目標(biāo)地址。在編譯程序工作的全過程中,都需要對符號表進行頻繁地訪問,耗費的時間在整個編譯過程中占有很大比例。合理地組織符號表并選擇好的查表、填表
3、方法是提高編譯程序工作效率的有效辦法。對于編譯程序所用的符號表來說,所涉及的基本操作大致可以歸納為五類:(1)判斷一個給定的名字是否在表中;(2)在表中填入新的名字;(3)對給定的名字訪問它在表中的有關(guān)信息;(4)對給定的名字填入或更新它在表中的某些信息;(5)從表中刪去一個或一組無用的項。8.1.2符號表的組織按照處理對象的特點,符號表的組織方式一般可分為直接方式和間接方式。直接方式是指在符號表中直接填入源程序中定義的標(biāo)識符及相關(guān)信息。如圖8-1,在符號表中,Name欄的長度是固定的,這種欄目長度固定的表格易于組織、填寫或查找,是最簡單的一種符號表組織方式,適
4、合于規(guī)定標(biāo)識符長度的程序語言。NameInformationWan…che…xue………圖8-1直接組織方式的符號表注意:并不是所有高級語言都規(guī)定標(biāo)識符的長度,如果對標(biāo)識符長度不加限制,則上述定長方式必須按最大長度來定長,顯然浪費存儲空間。因此,對不定長標(biāo)識符一般采用間接方式來組織符號表。間接方式是指單獨設(shè)置一個字符串?dāng)?shù)組來存放所有的標(biāo)識符,并在符號表的名字欄中設(shè)置兩項內(nèi)容:指針:用來指向標(biāo)識符在數(shù)組中的起始位置;一個整數(shù)值:用來表示該標(biāo)識符的長度。圖8–2給出了符號表的間接組織方式示意圖:圖8-2間接組織方式的符號表STUDENTGRANDAGE…NameIn
5、formation……………753另一種組織方式:按照標(biāo)識符的種屬,如簡單變量、數(shù)組、過程等分別建立不同的符號表。例如:intf(inta,intb){intc;if(a>b)c=1;elsec=0;returnc;}圖8-3按標(biāo)識符種屬組織的各種符號表NameabcInformation整型,變量,形參整型,變量,形參整型,變量value10(b)常數(shù)表NamefInformation二目子程序,入口地址(c)函數(shù)入口名表(a)簡單變量名表根據(jù)符號表名字欄的組織特點,符號表信息欄的組織方式也分為兩類:固定信息內(nèi)容和記錄信息存放地址。如果名字欄中的標(biāo)識符按種屬分
6、類:因同類標(biāo)識符基本特征一致,故可將相關(guān)信息一一記錄在信息欄中。如果名字欄中的標(biāo)識符不分種屬:由于不同種屬的標(biāo)識符其特征不一致,不容易確定一個固定長度的空間來統(tǒng)一安排,可在符號表外另設(shè)一組存儲空間,并在符號表信息欄中放一指針來指向這個存儲空間始址。例如:對數(shù)組標(biāo)識符需要存儲有關(guān)數(shù)組維數(shù),每維上、下界值,數(shù)組類型及數(shù)組存放的起始地址等信息。如果將信息與名字一起全部放在符號表中,則因維數(shù)不同而使記錄該信息的空間大小不易確定,通常給它們另外安排一個內(nèi)情向量表來記錄數(shù)組的全部信息,同時在符號表的信息欄設(shè)置一指針指向內(nèi)情向量的入口地址,如圖8-4所示。對函數(shù)名、過程名等含
7、有較多信息且不容易規(guī)范信息長度的名字都可以采取這種辦法。Name…aInformation數(shù)組………符號表維數(shù)首地址下界i1上界u1…內(nèi)情向量表圖8-4記錄數(shù)組內(nèi)情向量的符號表8.1.3分程序結(jié)構(gòu)語言的符號表建立分程序結(jié)構(gòu)語言:是指語言編寫的分程序中可以再包含嵌套的分程序,并且可以定義屬于它自己的一組局部變量。由于分程序的嵌套導(dǎo)致名字作用域的嵌套,故有時也將允許名字作用域嵌套的語言稱為具有分程序結(jié)構(gòu)的語言。典型的分程序結(jié)構(gòu)語言是PASCAL;通常不把C語言視為嵌套分程序結(jié)構(gòu)的語言,但在它的函數(shù)定義中,函數(shù)體可以是一個嵌套的分程序,因而其中所涉及的各個局部變量的作
8、用域也具有嵌套特征。對于