符号表作为编译系统的重要组成部分,贯穿于
文
法分析
、
检查
和
语义处理
的编译全过程
在编译程序中符号表用来存放源程序中出现的
有
关名字的属性信息
,这些信息集中反映了
名字的
语义特征属性
。
符号表总体结构的设计和实现下列因素有关
源语言的复杂性(包括词法结构、语法结构的复杂性)
对于编译系统在时间效率和空间效率方面的要求
符号表中所登记的信息在编译不同阶段都要用到
例如:在
词法分析
及
语法分析
过程中不断更新表中的
信息
在语义分析之前已经创建符号表,语义分析阶段写入
名字属性信息
另外,在词法分析到代码生成的
各阶段
则会从表
中获取不同的属性信息
符号表的功能主要归结为以下几个方面:
① 收集符号属性
编译程序扫描说明部分收集有关标识符的属性,
并在符号表中建立符号的相应属性信息
② 作为上下文语义的合法性检查的依据
通过符号表中属性记录可进行相应
上下文的语义检查
③ 作为目标代码生成阶段地址分配的依据
符号表的组成
❖
符号表包括
名字栏
和
信息栏
(可有多列)。
信息栏
包含许多子栏和标志位,用
来记录相应名字和各种属性
名字栏
也称主栏。主栏的内容称为
关键字
(key
word)
符号表的符号常见属性
虽然不同的语言定义的标识符属性不尽相同,下列
几种属性通常都是需要的:
①
符号名
② 符号的类型
③
符号的存储类别
④ 符号的作用域及可视性
⑤ 符号变量的存储分配信息
⑥ 符号的其它属性:数组内情向量、记录结构型的成员
信息、函数及过程的形参
符号表的实现/操作
在整个编译期间,对于符号表的操作大致可归纳
为五类:
对给定名字,
查询
名字是否已在表中;
往表中
插入
一个新的名字;
对给定名字,
访问
它的某些信息;
对给定名字,
填写
或
更新
它的某些信息;
删除
一个或一组无用的项。