資源描述:
《《符號(hào)表與錯(cuò)誤處理》PPT課件》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫。
1、第8章符號(hào)表與錯(cuò)誤處理8.1符號(hào)表8.2錯(cuò)誤處理8.1符號(hào)表8.1.1符號(hào)表的作用8.1.2符號(hào)表的組織8.1.3分程序結(jié)構(gòu)語言的符號(hào)表建立8.1.4常用符號(hào)表結(jié)構(gòu)8.1.1符號(hào)表的作用一、作用:詞法分析階段:建立符號(hào)表,查找符號(hào)表;語法分析階段:獲取單詞屬性信息;語義分析時(shí):符號(hào)表中的信息可以用于語義檢查;代碼優(yōu)化時(shí):用符號(hào)表提供的信息選出恰當(dāng)?shù)拇a進(jìn)行優(yōu)化;目標(biāo)代碼生成時(shí):編譯程序?qū)⒁罁?jù)符號(hào)表中的符號(hào)名來分配目標(biāo)地址。8.1.1符號(hào)表的作用二、內(nèi)容:名字(標(biāo)識(shí)符):相關(guān)信息:名字的種屬(常數(shù)、變量、數(shù)組、
2、標(biāo)號(hào)等)名字的類型特征給此名字分配的存儲(chǔ)單元地址、與此名語義有關(guān)的其它信息等8.1.1符號(hào)表的作用三、基本操作:(1)判斷一個(gè)給定的名字是否在表中;(2)在表中填入新的名字;(3)對(duì)給定的名字訪問它在表中的有關(guān)信息;(4)對(duì)給定的名字填入或更新它在表中的某些信息;(5)從表中刪去一個(gè)或一組無用的項(xiàng)。8.1符號(hào)表8.1.1符號(hào)表的作用8.1.2符號(hào)表的組織8.1.3分程序結(jié)構(gòu)語言的符號(hào)表建立8.1.4常用符號(hào)表結(jié)構(gòu)8.1.2符號(hào)表的組織直接方式間接方式按標(biāo)識(shí)符的種屬組織符號(hào)表8.1.2符號(hào)表的組織一、直接方式直
3、接填入源程序中定義的標(biāo)識(shí)符及相關(guān)信息,各欄的長(zhǎng)度固定。8.1.2符號(hào)表的組織二、間接方式:1、單獨(dú)設(shè)置一個(gè)字符串?dāng)?shù)組來存放所有的標(biāo)識(shí)符2、在符號(hào)表的名字欄中設(shè)置指針和整數(shù)值三、按標(biāo)識(shí)符的種屬組織符號(hào)表如簡(jiǎn)單變量名表、數(shù)組名表、過程名表等。例如,下面的函數(shù):intf(inta,intb){intc;if(a>b)c=1;elsec=0;returnc;}8.1.2符號(hào)表的組織圖8-3按標(biāo)識(shí)符種屬組織的各種符號(hào)表(a)簡(jiǎn)單變量名表;(b)常數(shù)表;(c)函數(shù)入口名表符號(hào)表信息欄的組織方式固定信息內(nèi)容:適合名字欄中的
4、標(biāo)識(shí)符按種屬分類;僅記錄信息存放地址:適合符號(hào)表的名字不分種屬;符號(hào)表外另設(shè)一組存儲(chǔ)空間,并在符號(hào)表信息欄中放一指針來指向這個(gè)存儲(chǔ)空間始址圖8-4記錄數(shù)組內(nèi)情向量的符號(hào)表8.1符號(hào)表8.1.1符號(hào)表的作用8.1.2符號(hào)表的組織8.1.3分程序結(jié)構(gòu)語言的符號(hào)表建立8.1.4常用符號(hào)表結(jié)構(gòu)8.1.3分程序結(jié)構(gòu)語言的符號(hào)表建立采用分層建立和處理符號(hào)表的方式(PASCAL程序)方法:(1)在分程序首部掃描到標(biāo)識(shí)符時(shí),查本層符號(hào)表,登記一項(xiàng)。(2)在分程序的語句中掃描到標(biāo)識(shí)符時(shí),查本層及其外層符號(hào)表。8.1.3分程序結(jié)
5、構(gòu)語言的符號(hào)表建立一、符號(hào)表的組織方式分層組織符號(hào)表的登記項(xiàng),使各分程序的符號(hào)表登記項(xiàng)連續(xù)地排列在一起。(2)建立“分程序表”,記錄各層分程序符號(hào)表的有關(guān)信息。登記項(xiàng)由三個(gè)字段組成:OUTERN:指明該分程序的直接外層分程序的編號(hào);COUNT:記錄該分程序符號(hào)表登記項(xiàng)的個(gè)數(shù);POINTER:指向該分程序符號(hào)表的起始位置。8.1.3分程序結(jié)構(gòu)語言的符號(hào)表建立二、符號(hào)表的構(gòu)建設(shè)置一個(gè)臨時(shí)工作棧。每進(jìn)入分程序,就在分程序表中登記一項(xiàng),并使之成為當(dāng)前的分程序。當(dāng)掃描到定義性出現(xiàn)的標(biāo)識(shí)符時(shí),將名字及其有關(guān)信息填入臨時(shí)工
6、作棧的頂部,把當(dāng)前分程序相應(yīng)登記項(xiàng)的COUNT值加1。當(dāng)分程序結(jié)束時(shí),將臨時(shí)工作棧中的本層分程序全部登記項(xiàng)移至正式的符號(hào)表中,退出本層分程序。重復(fù)步驟(2)--(4),直至掃描完整個(gè)源程序?yàn)橹?。?.1一示意性源程序如下:(1)PROGRAMPP(input,output);(2)COUNTnorw=13;(3)VARll,kk:integer;(4)word:ARRAY[1..norw]OFchar;(5)PROCEDUREgetsym;(6)VARi,j:integer;(7)PROCEDUREgetch
7、;(8)BEGINEND;{getch}(9)BEGIN(10)j:=1;kk:=i+j(11)END;{getsym}(12)BEGIN(13)END.{pp}回答以下問題:(1)畫出“掃描到getsym過程體之前”的棧符號(hào)表;(2)畫出“掃描完getsym過程說明(即掃描完END;{getsym})”時(shí)的棧符號(hào)表。[解答]假定所有的名字在數(shù)據(jù)區(qū)中都只需要一個(gè)單元。圖8-5“掃描到getsym過程體之前”的棧符號(hào)表圖8-6“掃描完getsym過程說明”的棧符號(hào)表8.1符號(hào)表8.1.1符號(hào)表的作用8.1.2符
8、號(hào)表的組織8.1.3分程序結(jié)構(gòu)語言的符號(hào)表建立8.1.4常用符號(hào)表結(jié)構(gòu)8.1.4常用符號(hào)表結(jié)構(gòu)1.線性符號(hào)表2.有序符號(hào)表3.散列符號(hào)表8.1.4常用符號(hào)表結(jié)構(gòu)1.線性符號(hào)表按標(biāo)識(shí)符出現(xiàn)的先后次序建立符號(hào)表,查找效率較低.2.有序符號(hào)表把標(biāo)識(shí)符按照一定的順序進(jìn)行排列。采用折半查找法,不適合動(dòng)態(tài)查找符號(hào)表8.1.4常用符號(hào)表結(jié)構(gòu)2.有序符號(hào)表二叉排序樹結(jié)構(gòu)8.1.4常用符號(hào)表結(jié)構(gòu)3.散列符號(hào)表適用于邊