編譯原理 符號表10_第1頁
編譯原理 符號表10_第2頁
編譯原理 符號表10_第3頁
編譯原理 符號表10_第4頁
編譯原理 符號表10_第5頁
已閱讀5頁,還剩17頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、第七章: 符號表管理技術7.1 概述7.2 符號表的組織與內容7.3 非分程序結構語言的符號表組織7.4 分程序結構語言的符號表組織17.1 概述 (1)什么是符號表?在編譯過程中,編譯程序用于記錄源程序中各種名字的特性信息, 所以也稱為名字特性表。名字: 程序名、過程名、函數名、用戶定義類型、變量名、符號名字。特性信息:名字種類、類型、維數、參數個數及目標地址(存儲單元地址)等。2(2) 建表和查表的必要性 (符號表在編譯過程中的作用) 源程序中變量要先聲明,然后才能引用。用戶通過聲明語句,聲明各種名字,以及給出它們的類型維數等信息,編譯程序在出來這些聲明語句時,因將聲明中的名字以及信息登錄

2、到符號表中,同時編譯還要給變量分配存儲單元,而存儲單元地址也必須登錄在符號表中。當編譯程序編譯到引用所聲明的變量時(賦值或引用其值)要進行語法語義正確性檢查 類型是否符合要求和生成相應的目標程序,這就需要查符號表來取得相關信息。31.語法分析和語義分析 說明語句賦值語句的語法規則 上下文有關分析;是否聲明; 類型一致性檢查2. 生成目標代碼LOAD a 的地址ADD b 的地址STO x 的地址例: int x,a,b; L: x:=a+b; 建表分配存貯符號表數據區X 簡單變量 整型A 簡單變量 整型B 簡單變量 整型L 標號4(3) 有關符號表的操作:填表和查表填表:當分析到程序中的說明或

3、定義語句時應將說明或定義的名字以及與之有關的信息填入符號表中 例:Procedure P()查表:(1) 填表前查表檢查在程序的同一作用域內名字是否重復定義(2) 檢查名字的種類是否與說明一致(3)對于強類型語言要檢查表達式中各變量的類型是否一致(4) 生成目標指令時要取得所需要的地址5 7.2 符號表的組織與內容(1)符號表的結構與內容符號表的基本結構如下 名字 特性(信息) “名字”域:存放名字。一般為標識符的符號串,也可為指向標識符字符串串指針6“特性”域:可包括多個子域,分別表示標識符的有關信息。如:名字(標識符)的種類:變量、函數、過程、數組、標號、參數等類型:如整型、浮點型、字符型

4、、指針等性質:變量形參、值形參等名字:常量名地址:變量所分配單元的首址或地址位移大小:所占的字節數名字 特性(信息)7作用域的嵌套層次 對于數組:維數、上下界值、計算下標量地址所用的信息以及數組元素類型等對于記錄(結構、聯合):域的個數、每個域名、地址位移、類型等對于過程或函數:形參個數、所在層次、函數返回值類型、局部變量所占空間大小等對于指針:所指對象類型等8(2) 組織方式1.統一符號表:無論什么名字都填入統一格式的符號表中符號表表項應按信息量最大的名字設計 填表查表比較方便 結構簡單 但是浪費大量空間2.對于不同種類的名字分別建立各種符號表節省空間 但是填表和查表不方便3.折中辦法: 大

5、部分共同信息組成統一格式的符號表。 特殊信息另設附表,兩者用指針連接.9例:begin array B1.100end補充指針連接107.3非分程序結構語言的符號表組織(1) 分程序的結構語言:每個可獨立進行編譯的程序單元是一個不包含有子模塊的單一模塊.如Fortran語言Fortran程序構造主程序子程序及函數主程序和子程序中可定義common語句11(2) 標識符的作用域及基本處理辦法1.作用域: 全局: 子程序名,函數名和公共區名 局部: 程序單元中定義的變量2. 符號表的組織3.基本處理辦法 子程序函數名和公共區變量填入全局符號表12 在聲明部分讀到標識符,造局部符號表查本程序單元局部

6、符號表,有無同名 在語句部分讀到標識符 查表查本程序單元局部符號表有無同名有,重復聲明,報錯無,造表有,即已聲明無,查全局變量表有 全局量無 無定義標識符13 (3) 符號表的組織方式4.程序單元結束:釋放該程序單元的局部符號表5.程序編譯完成:釋放全部符號表1.無序符號表:按掃描順序建表,查表要逐項查找 查表操作的平均長度為:n+1/2142. 有序符號表符號表按變量名進行字典式排序 線性查表:n+1/2 折半查表:log2n-1 3.散列符號表(Hash) 表: 符號表地址=Hash(標識符) 解決:沖突157.4分程序結構語言的符號表組織(1) 分程序的結構語言: 塊內可嵌入子模塊(2)

7、 標識符的作用域和基本處理方法作用域:標識符局部于所定義的模塊(最小模塊)模塊中所定義的標識符作用域是定義該標識符的子程序16 A為內分程序局部變量 A為內分程序全局變量都是局部變量Real A;Real A;Real A;Real A;Real A;Real A;B:=A;17begin procedure P(i,j); begin L end goto L; P(3,5); End;過程或函數說明中定義的標識符(包括形參) 其作用域為本過程體例:18循環語句中定義的標識符,其作用域為該循環語句for do begin L end goto L; 不能從循環體外轉到循環體內循環語句應看作一

8、層19建查符號表均要遵循標識符作用域規定進行建表不能重復 不能遺漏查表按標識符作用域基本處理辦法:Real x,A,BInteger x,y; procedure p() begin real x; A:=x+2.0; endB:=x+2.0定義重復錯誤必須填表查表是本層的查表是本層的(最外層的)20處理方法假設標識符是先聲明后引用(標號例外,要特殊處理) a.在程序聲明部分讀到標識符時 聲明性出現 建表查本層符號表 有無重名b.在語句中讀到標識符(引用性出現)查表查本層符號表 有無重名有 重復聲明 報錯無 填入符號表有 即已聲明 已取該名字 信息 局部量無 是否是最外層?是 未聲明標識符 報錯否 轉到直接外層21c.標準標識符的處理 主要是語言定義的一些標準過程和函數的名字,它們是標識符的

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論