資源描述:
《《符號表與錯誤處理》PPT課件》由會員上傳分享,免費在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫。
1、第8章符號表與錯誤處理8.1符號表8.2錯誤處理(1)什么是符號表?在編譯過程中編譯程序用于記錄源程序中各種名字的特性信息,所以也稱為名字特性表。名字:程序名、過程名、函數(shù)名、用戶定義類型、變量名、符號名字特性信息:名字種類、類型、維數(shù)、參數(shù)個數(shù)及目標地址(存儲單元地址)等8.1符號表(2)建表和查表的必要性(符號表在編譯過程中的作用)源程序中變量要先聲明,然后才能引用。用戶通過聲明語句,聲明各種名字以及給出它們的類型、維數(shù)等信息。編譯程序在出來這些聲明語句時,將聲明中的名字以及信息登錄到符號表中,同時編譯還要給變量分配存儲單元。而存儲單元地址也必須登錄在符號表中。當編譯程序編譯到引用
2、所聲明的變量時(賦值或引用其值)要進行語法、語義正確性檢查(類型是否符合要求)和生成相應(yīng)的目標程序,這就需要查符號表來取得相關(guān)信息。(3)有關(guān)符號表的操作:判斷一個給定的名字是否在表中;在表中填入新的名字;對給定的名字訪問它在表中的有關(guān)信息;對給定的名字填入或更新它在表中的某些信息;從表中刪去一個或一組無用的項。1符號表項的組織與內(nèi)容(1)符號表項的組織符號表的基本結(jié)構(gòu)如下:名字信息欄名字域的組織:存放名字(一般為標識符)的符號串,也可為指向標識符字符串的指針。信息欄的組織:多個子域分別表示標識符的有關(guān)信息。不同種類的符號有不同信息域。一般的名字可能共有的信息域:名字的種類:可變量、函
3、數(shù)、過程、數(shù)組、標號、參數(shù)等類型:如整型、浮點型、字符型、指針等性質(zhì):變量、形參等地址:變量所分配單元的首址或地址位移大?。核嫉淖止?jié)數(shù)非共有信息域:對于數(shù)組:維數(shù)、上下界值、計算下標量地址所用的信息以及數(shù)組元素類型等。對于記錄結(jié)構(gòu)聯(lián)合:域的個數(shù),每個域名、地址位移、類型等。對于過程或函數(shù):形參個數(shù),所在層次、函數(shù)返回值類型、局部變量所占空間大小等。對于指針:所指對象類型等。(2)符號表的總體組織方式:構(gòu)造多少張符號表,哪些符號放在同一張表中。1.統(tǒng)一符號表:不論什么名字都填入統(tǒng)一格式的符號表中符號表表項應(yīng)按信息量最大的名字設(shè)計,填表查表比較方便,結(jié)構(gòu)簡單,但是浪費大量空間。2.對于不
4、同種類的名字分別建立各種符號表節(jié)省空間,但是填表和查表不方便。3.折中辦法:大部分共同信息組成統(tǒng)一格式的符號表.特殊信息另設(shè)附表,兩者用指針連接。符號表的物理組織結(jié)構(gòu)線性符號表:按符號表項的掃描順序建表,查表要逐項查找。查表操作的平均長度為N+1/2。有序符號表:符號表按變量名進行字典式排序。折半查表的平均長度為LOG2N-1,插入效率低。二叉排序樹:查表的平均長度1+4lgN散列符號表表:符號表地址=HASH(標識符)需解決沖突。2非過程嵌套程序語言的符號表組織(1)非過程嵌套語言:每個可獨立進行編譯的程序單元是一個不包含有子模塊的單一模塊。如FORTRAN語言。FORTRAN程序構(gòu)
5、造主程序和子程序中可定義comman語句(2)名字的作用域及基本處理辦法1.作用域:全局:子程序名、函數(shù)名和公共區(qū)名。局部:程序單元中定義的變量。2.符號表的組織:3.基本處理辦法<1>子程序、函數(shù)名和公共區(qū)變量填入全局名表局部名表全局名表<2>在聲明部分讀到標識符,造局部名表<3>在語句部分讀到標識符,查表<4>程序單元(如:子程序)結(jié)束:釋放該程序單元的局部名表。<5>程序編譯完成:釋放全部符號表。3過程嵌套結(jié)構(gòu)語言的符號表組織(1)過程嵌套的結(jié)構(gòu)語言:模塊(過程)內(nèi)可嵌入子模塊(過程)。(2)標識符的作用域和基本處理方法:作用域:根據(jù)最近嵌套作用域原則,標識符局部于所定義的模塊(
6、最小模塊)。內(nèi)層模塊(過程)可引用外層模塊(過程)中說明的名字,反之則不行。(3)過程嵌套結(jié)構(gòu)程序語言的符號表的組織管理基本思想是,所有過程中定義的標識符都集中在單張符號表中。為了實現(xiàn)過程構(gòu)造中標識符的作用域和可視性規(guī)則的要求,在符號表中可設(shè)立一個屬性域用來登錄符號所在過程的層次。進入過程時,層次要增加一層。在退出一個過程中時,層次降低一層,且需要把符號表中,所有在退出的過程中登錄的符號項清除。引入DISPLAY嵌套層次表。8.2錯誤處理由于編譯程序處理的源程序總是或多或少地包含有錯誤,因而一個好的編譯程序應(yīng)具有較強的查錯或改錯能力。所謂查錯,是指編譯程序在工作過程中能夠準確、及時地將
7、源程序中的各種錯誤查找出來,并以簡明的形式報告錯誤的性質(zhì)及出錯位置。所謂改錯,就是當編譯程序發(fā)現(xiàn)源程序中的錯誤時,適當?shù)刈鲆恍┬扪a工作,使得編譯工作不至于因此而中止,以便能夠在一次編譯過程中盡可能多地發(fā)現(xiàn)源程序中的錯誤。然而,更正所發(fā)現(xiàn)的錯誤并不是一件容易的事,許多編譯程序?qū)嶋H上并不做改正錯誤的工作,而只是對源程序中的錯誤進行適當?shù)奶幚聿⑻^錯誤所在的語法成分,如單詞、說明、表達式或語句等,然后繼續(xù)對源程序的后繼部分進行編譯。源程序中的錯誤通常