符號表的作用

2021-10-04 14:07:33 字數 1090 閱讀 6576

編譯程式符號表用來存放語言程式**現的有關識別符號的屬性資訊,這些資訊集中反映了識別符號的語義特徵屬性。在詞法分析及語法在分析過程中不斷積累和更新表中的資訊,並在詞法分析到**生成的各階段,按各自的需要從表中獲取不同的屬性資訊。不論編譯策略是否分趟,符號表的作用和地位是完全一致的

編譯程式掃瞄說明部分收集有關識別符號的屬性,並在符號表中建立符號的相應屬性資訊。

int a;

float b[5];

在符號表中收集到關於符號a的屬性是乙個整型變數,

關於符號b的屬性是具有5個浮點型元素的一維陣列。

同乙個識別符號可能在程式的不同地方出現,而有關該符號的屬性是在這些不同情況下收集的。特別是在多趟編譯及程式分段編譯(在pascal及c中以檔案為單位)的情況下,更需檢查識別符號屬性在上下文中的一致性和合法性。通過符號表中屬性記錄可進行相應上下文的語義檢查。

int i [3,5]; //定義整型陣列i

...float i[4,2]; //定義實型陣列i,重定義衝突

...int i [3,5]; //定義整型陣列i,重定義衝突

編譯過程首先在符號表中記錄了識別符號i的屬性是3×5個整型元素的陣列,而後在分析第

二、第三這兩個

定義說明時編譯系統可通過符號表檢查出識別符號i的二次重定義衝突錯誤。

本例還可以看到不論在後二句中i的其它屬性與前一句是否完全相同,

只要識別符號名重定義,就將產生重定義衝突的語義錯誤。

每個符號變數在目標**生成時需要確定其在儲存分配的位置(主要是相對位置)。語言程式中的符號變數由它被定義的儲存類別(如在c、fortran語言中)或被定義的位置(如分程式結構的位置)來確定。首先要確定其被分配的區域。

例如,在c語言中首先要確定該符號變數是分配在公共區(extern)、檔案靜態區(extern static)、函式靜態區(函式中static)、還是函式執行時的動態區(auto)等。其次是根據變數出現的次序,(一般來說)決定該變數在某個區中所處的具體位置,這通常使用在該區域中相對區頭的相對位置確定。而有關區域的標誌及相對位置都是作為該變數的語義資訊被收集在該變數的符號表屬性中。

符號表的作用和地位

在編譯程式中符號表用來存放語言程式中出現的有關識別符號的屬性資訊,這些資訊集中反映了識別符號的語義特徵屬性。在詞法分析及語法在分析過程中不斷積累和更新表中的資訊,並在詞法分析到 生成的各階段,按各自的需要從表中獲取不同的屬性資訊。不論編譯策略是否分趟,符號表的作用和地位是完全一致的。收集符號屬性 上...

符號表的作用和地位

在編譯程式中符號表用來存放語言程式 現的有關識別符號的屬性資訊,這些資訊集中反映了識別符號的語義特徵屬性。在詞法分析及語法在分析過程中不斷積累和更新表中的資訊,並在詞法分析到 生成的各階段,按各自的需要從表中獲取不同的屬性資訊。不論編譯策略是否分趟,符號表的作用和地位是完全一致的。收集符號屬性 上下...

邏輯符號表

邏輯符號表 跳轉到 導航,搜尋 在邏輯中,經常使用一組符號來表達邏輯結構。因為邏輯學家非常熟悉這些符號,他們在使用的時候沒有解釋它們。所以,給學邏輯的人的下列 列出了最常用的符號 它們的名字 讀法和有關的數學領域。此外,第三列包含非正式定義,第四列給出簡短的例子。要注意,在一些情況下,不同的符號有相...