導航:首頁 > 源碼編譯 > 編譯符號表去掉名字

編譯符號表去掉名字

發布時間:2025-06-19 12:13:54

① 什麼是符號表 符號表有哪些重要作用

符號表是一種用於語言翻譯器(例如編譯器和解釋器)中的數據結構。在符號表中,程序源代碼中的每個標識符都和它的聲明或使用信息綁定在一起,比如其數據類型、作用域以及內存地址。

符號表的作用:符號表在編譯程序工作的過程中需要不斷收集、記錄和使用源程序中一些語法符號的類型和特徵等相關信息。這些信息一般以表格形式存儲於系統中。

如常數表、變數名表、數組名表、過程名表、標號表等等,統稱為符號表。對於符號表組織、構造和管理方法的好壞會直接影響編譯系統的運行效率。


(1)編譯符號表去掉名字擴展閱讀

編譯程序按名字的不同種屬分別使用許多符號表,如常熟表。變數名表過程名表函數入口名表。符號表的關鍵字域(段)就是符號名稱等長關鍵字域(段)符號表。

不等長關鍵欄位符號表,採用關鍵字詞的索引結構。關鍵字在符號表的查找中相當重要hash函數構造方法就是以取關鍵字的值不同區分,如直接定址伐數字分析法折疊法。

② 定義語法樹和符號表的數據結構

為了維持靜態作用域的程序里各個名字的軌跡,編譯器需要依靠一種稱為符號表的數據結構。從最基本的層次上看,符號表就是一個字典:它把名字映射到編譯器已知的有關信息。這里最基本的操作是把一個新映射關系(名字對象約束)放入表裡,以及(非破壞性的)用一個給定名字去提取映射下的信息,以後我們把

這兩個操作分別稱為insert和lookup。大部分語言里的靜態作用域規則還提出了另外的復雜性,它們要求在程序里的不同部分有不同的引用環境。為了處理作用域規則,我們可能希望簡單增加一個remove操作。由於編譯器在語義分析階段要從頭到尾掃描代碼,這樣它就可以在某個作用域開始時插入新約束,在作用域最後撤銷它們。但是,存在一些因素使這種直接做法並不實際。

¨ 在許多有著嵌套作用域的語言里,內層聲明的效果可以遮蔽外層聲明,這就意味著符號表必須有能力為一個給定名字保存任意數目的映射。lookup操作必須返回最內層的映射,到作用域結束時還必須使外層映射重新變成可見的。

¨ 類Algol語言里的記錄(結構)具有某種作用域性質,但卻又不享有作用域那樣的良好嵌套結構。當語義分析器看到一個記錄聲明時,它就必須記下各個記錄域的名字(它們也是遞歸的,因為記錄可以嵌套)。在這種聲明結束時,各個域的名字又必須變成不可見的。然而,在此之後,一旦這一記錄類型的某個變數出現在程序的正文里(例如在my_rec.field_name),在引用中位於圓點之後的部分,這些域名又必須立即重新變成可見的。在Pascal和另一些有with語句的語言里,記錄域的名字還應該在多個語句的上下文里變成可見的。

¨ 某些時候一些名字有可能在它們被聲明之前使用,即使在類Algol語言里情況也如此。舉例說,Algol 60和Algol 68都允許標號的向前引用。Pascal避免了這種情況,它要求標號必須在作用域開始處聲明,但還是允許指針聲明的向前引用:

type

閱讀全文

與編譯符號表去掉名字相關的資料

熱點內容
寶駿560壓縮機 瀏覽:676
迷你炸ice伺服器怎麼回事 瀏覽:204
數控宏程序編程手冊 瀏覽:369
servlet3源碼 瀏覽:346
電視怎麼安裝安卓盒子 瀏覽:369
青島租車app哪個好 瀏覽:688
cad偏置命令 瀏覽:905
filezilla命令 瀏覽:617
學英文哪個app好 瀏覽:274
加密文檔怎麼設置只讀 瀏覽:261
t首選ntp伺服器ip地址 瀏覽:339
android範例大全pdf 瀏覽:375
微信夾娃娃游戲源碼 瀏覽:376
擠眼app在哪裡可以下載 瀏覽:739
壓力高壓縮機不工作 瀏覽:53
少爺pdf 瀏覽:704
威綸觸摸屏反編譯報格式錯誤 瀏覽:406
win10怎麼不共享users文件夾 瀏覽:664
遺傳演算法matlabpdf 瀏覽:43
新手php開發工具 瀏覽:256