第六章 符號表(1)

      在編譯程序工作的過程中,需要不斷收集、記錄和使用源程序中一些語法符號(簡稱爲符號)的類型和特徵等相關信息。爲方便起見,一般的做法是讓編譯程序在其工作過程中,建立並保持一批表格,如常數表、變量名錶、數組名錶、過程或子程序名錶及標號表等等,我們將它們統稱爲符號表或名字表。符號表的每一登記項,將填入名字標識符以及與該名字相關聯的一些信息。這些信息,將全面地反映各個符號的屬性及它們在編譯過程中的特徵,諸如名字的種屬(常數、變量、數組、標號等)、名字的類型(整型、實型、邏輯型、字符型等)、特徵(當前是定義性出現還是使用性出現等)、給該名字分配的存儲單元地址以及與該名字的語義有關的其它信息等等。

       根據對編譯程序工作階段的劃分,名字表中的各種信息將在編譯程序工作過程中的適當時候填入。對在詞法分析階段就建造符號表的編譯程序,當從源程序中識別出一個單詞(名字)時,就以此名字查符號表,若表中尚無此登記項,則將該名字列入表中。至於與之相關的一些信息,可視工作的方便,分別在語法分析、語義處理及中間代碼生成等階段陸續填入。以後我們將會進一步看到,幾乎在編譯程序工作的全過程中,都需要對符號表進行頻繁的訪問(查表或填表),且耗費的時間在整個編譯過程所需的總時間中佔有很大的比例。因此,合理地組織符號表,並相應地選擇好查填表的方式,實爲提高編譯程序工作效率的有效途徑之一。

1、符號表的組織

      一般而言,對於同一類符號表,例如變量名錶,它的結構以及表中每一登記項所包含的內容,由於程序設計語言種類和目標計算機的不同,可能有較大的差異。然而抽象地看,各類符號表一般都具有如圖6-1所示的形式。也就是說,符號表的每一項都由兩個欄目組成:第一欄爲名字欄,用來存放標識符或其內部碼;第二欄爲信息欄,一般由若干個子欄(或域)組成,用來記錄與該項名字相對應的各種屬性之值和特徵。


                                      圖6-1 符號表的形式



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章