,为了完成源程序到目标代码的翻译,需要不断收集、记录和使用源程序中一些语法符号的类型、特征和属性等相关信息。通常这些信息利用一些表格来保存,如常数表、变量名表、数组名表、过程或子程序名表以及标号表等。习惯上,将这些表格统称为符号表。。这些信息全面反映了各个符号的属性及它们在编译过程中的特征。在编译程序工作的全部过程中,都需要频繁对符号表进行访问。有时填写信息,有时是查找信息。3无论是查找,还是填写符号表,在编译过程中都是一笔很大的开销。但仍然要利用它,因为,它的功能体现如下:收集符号属性:在分析语言程序中标识说明部分时,编译程序根据说明信息收集有关标识符的属性,并在符号表中建立符号的相应属性信息。上下文语义的合法性检查的依据:同一个符号,可能在不同的地方出现,有的是定义;有的是引用。需要检查上下文之间的一致性和合法性。:除了在分析过程中临时变量需要存贮单元外,每个符号变量在生成目标代码时需要安排存贮位置。这需要解决两个问题:存在哪个存贮区;在存贮区中存在哪个位置。这两个信息都要存贮在符号表中。符号表在编译过程中担任很重要的角色,然而,又有很大开销。因此,合理组织符号表,正确利用符号表,是提高编译程序工作效率的重要一环。(保留字)符号、操作符符号和标识符符号。它们之间的主要属性有较大差别。需要建立不同的符号表。以标识符为例,通常具有下列几种属性:符号名:在程序设计语言中,一个标识符可以是一个变量名、一个函数名或一个过程的名字;每个标识符通常由若干个字符组成的字符串来表达。6因为标识符是变量、函数或过程的唯一标识,因此标识符的重命名问题需要注意。符号名与它在符号表中的位置一一对应,而该位置通常用一个整数来表示,这个整数就是该符号的内部代码,在分析过程中符号串就变成了一个数值,识别与处理就方便了。:除了过程标识符之外函数和变量标识符都具有数据类型属性,其中,对于函数的数据类型指的是函数值的数据类型;基本数据类型有整数、实数、字符、逻辑及位组型等;符号的类型属性是在语言程序中定义的;变量符号的类型属性决定了该变量的数据存贮格式和可以施加的运算操作;8不同类型的变量类型在运算过程中可能发生变化;符号类型调整的原则是把其中一个存贮尺寸较小或结构简单的变量转换成另一个符号类型;在基本数据类型基础上可以扩充复合数据类型。如数组类型、记录结构类型等;符号的类型是符号表存贮的符号的重要属性。:大多数语言对变量的存贮类别定义采用二种方式;一种是用关键字指定。MON、Static等;另一种是根据定义变量说明在程序中的位置来决定。如私有变量、全局变量等;区别符号存贮类型的属性是编译过程语义处理、检查和存贮分配的重要依据。10
符号表的作用和地位 来自淘豆网m.daumloan.com转载请标明出处.