符號表是什麼意思

符號表(Symbol Table)是一個數據結構,用於在編譯過程中貯存和跟蹤程式中各種符號(如變量、函數、標識符等)的信息。這些信息可能包括符號的名稱、類型、值、作用域(即符號有效的程式區域)以及其他相關的屬性。

在編譯器的語法分析階段,編譯器會遇到各種標識符,這些標識符在後續的語義分析階段需要被檢查和賦予意義。符號表的建立和維護通常在語法分析或語義分析階段進行,目的是為了在編譯的後續階段(如代碼生成階段)能夠快速訪問和處理這些符號。

符號表中的每一條目通常包含以下信息:

  1. 符號名稱(Name):標識符的文本字元串。
  2. 符號類型(Type):變量、函數、標識符等。
  3. 符號值(Value):對於變量,這可能是它的初始值或地址;對於函數,這可能是它的入口點。
  4. 符號作用域(Scope):符號的作用域可以是在整個程式中(全局符號),或者在一個函數、循環、條件語句等內部(局部符號)。
  5. 其他屬性(Attributes):如符號是否已被聲明、是否已被定義、是否為外部符號等。

符號表的實現可以採用多種數據結構,如哈希表、二叉搜尋樹或有序陣列,以便快速插入、查找和更新符號信息。在編譯器的後續階段,如優化階段和代碼生成階段,符號表被用來確定變量的存儲類型、生成訪問變量的代碼、以及進行其他與符號相關的決策。

符號表不僅在編譯器中使用,也在解釋器、連接器和其他編譯時期的工具中使用。