符号表

来源:互联网 发布:php的存储过程调用 编辑:程序博客网 时间:2024/04/30 07:55

符号表是一种供编译器存储关于源程序各种元素信息的数据结构。

符号表的功能包括以下几个方面:

1)收集源程序中各元素的信息。

2)上下文语义相关性检查的依据。

3)存储分配的依据。

实际上,符号表就是编译器的中心信息库。符号表收集信息的完备与否,直接影响编译器编译后续决策的质量。


通常编译器的符号表可能包含如下内容:

1)变量(名字,类型描述,作用域,种类,存储地址等)

2)常量(名字,常量类型,作用域,值等)

3)函数(名字,形参列表,返回类型,存储地址,种类,中间代码列表等)

4)标号(名字,作用域)


符号表的信息收集工作主要集中在词法分析和语义分析两个阶段。有些编译器也会将符号表输出成一些标准的格式文件,供汇编器,连接器,调试器使用。

符号表的组织形式:

逻辑组织形式主要有两种:单表,多表。

六张符号表:变量信息表,常量信息表,过程信息表,枚举类型信息表,类型信息表,标号信息表。

1)变量信息表:变量名,变量所属过程的指针,变量的类型描述指针,变量的类别,变量的寻址方式是直接寻址还是间接寻址,变量的逻辑存储地址,变量是否被使用过。

2)常量信息表:常量与变量是完全不同的,因为常量在目标程序中是不予分配存储空间的。常量的基本类型,常量的实际类型,常量的值,枚举类型描述指针,常量是否被使用。

3)过程信息表:通常包括形参列表,返回值类型以及参数传递方式。除了普通的过程,函数信息之外,如果输入源程序中使用了函数指针类型,那么,相关的信息也将在过程信息表中体现,过程函数名字,过程的等级,表项类型,形参类表信息,返回类型描述指针,返回变量指针,过程修饰标志,外部修饰说明,原型单词流,中间代码序列,可共享存储区域的临时变量集合,相关局部变量的空间大小,临时变量的指针,过程或函数是否被使用,过程或函数中是否使用了临时变量。

形参列表表项结构及其信息:形参名,形参类型指针,指向形参所关联变量的指针。 参数的传递方式: 值传递, 址传递,引用传递。

4)类型信息表:类型可能是高级程序设计语言与汇编语言的最主要的区别之一。与变量, 常量,过程,函数等其他语法元素相比,类型可能是最为复杂的。

类型描述,简而言之,就是设计一种数据结构用于描述程序设计语言的类型。在编译器设计中,类型描述最终体现在符号表中。

不同的编译器的类型描述可能存在一定的差异,但他们的内核却惊人的相似,都是使用类型链的形式加以描述的。

类型链就是按照语义层次将复合形式的类型逐一分解成单一的类型节点,并将这些类型节点依次连接形成一个线性结构。

类型名,数据类型,指向下一个类型节点的指针。记录类型字段列表,数组类型的维度列表,基本类型,备注,处理状态。

包括C,pascal等绝大多数程序设计语言都不支持递归声明。因为编译器无法准确计算这种类型的变量所需要的存储空间的大小,无法进行存储空间的分配

5)枚举信息表:存储枚举类型的枚举常量信息。

6)标号表信息


0 0
原创粉丝点击