第六章 符号表(1)

      在编译程序工作的过程中,需要不断收集、记录和使用源程序中一些语法符号(简称为符号)的类型和特征等相关信息。为方便起见,一般的做法是让编译程序在其工作过程中,建立并保持一批表格,如常数表、变量名表、数组名表、过程或子程序名表及标号表等等,我们将它们统称为符号表或名字表。符号表的每一登记项,将填入名字标识符以及与该名字相关联的一些信息。这些信息,将全面地反映各个符号的属性及它们在编译过程中的特征,诸如名字的种属(常数、变量、数组、标号等)、名字的类型(整型、实型、逻辑型、字符型等)、特征(当前是定义性出现还是使用性出现等)、给该名字分配的存储单元地址以及与该名字的语义有关的其它信息等等。

       根据对编译程序工作阶段的划分,名字表中的各种信息将在编译程序工作过程中的适当时候填入。对在词法分析阶段就建造符号表的编译程序,当从源程序中识别出一个单词(名字)时,就以此名字查符号表,若表中尚无此登记项,则将该名字列入表中。至于与之相关的一些信息,可视工作的方便,分别在语法分析、语义处理及中间代码生成等阶段陆续填入。以后我们将会进一步看到,几乎在编译程序工作的全过程中,都需要对符号表进行频繁的访问(查表或填表),且耗费的时间在整个编译过程所需的总时间中占有很大的比例。因此,合理地组织符号表,并相应地选择好查填表的方式,实为提高编译程序工作效率的有效途径之一。

1、符号表的组织

      一般而言,对于同一类符号表,例如变量名表,它的结构以及表中每一登记项所包含的内容,由于程序设计语言种类和目标计算机的不同,可能有较大的差异。然而抽象地看,各类符号表一般都具有如图6-1所示的形式。也就是说,符号表的每一项都由两个栏目组成:第一栏为名字栏,用来存放标识符或其内部码;第二栏为信息栏,一般由若干个子栏(或域)组成,用来记录与该项名字相对应的各种属性之值和特征。


                                      图6-1 符号表的形式



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