文档介绍:第6章符号表的组织与管理
符号表的作用
符号表的组织
符号表的建立和查找
本章小结
知识结构
符号表的作用
存放语言程序中出现的有关标识符的属性信息。
编译程序护理标识符时主要涉及两部分信息:
标识符本身
与标识符相关的信息,如标识符的类型、种属、作用域等等
收集有关标识符的属性,并在符号表中建立符号的相应属性信息
例如:int A; float B[5];
上下文语义的合法性检查的依据:
检查标识符属性在上下文中的一致性和合法性
例如,在C语言中同一个标识符可作引用说明和定义说明
┇
int i[3,5]; //定义说明i
┇
extern float i; // 引用说明i
┇
例如:
┇
int i[3,5];
┇
float i[4,2];
┇
int i[3,5];
┇
除语言中规定的临时分配存储的变量i外,每个符号变量
在目标代码生成时需要确定其在存储分配的位置(主要
是相对位置)
符号变量由它被定义的存储类别或被定义的位置来确定
首先要确定其被分配的区域
其次是根据变量出现的次序
而有关区域的标志及相对位置都是作为该变量的语义信息
被收集在该变量的符号表属性中
符号的主要属性及作用
语言符号可分为:关键字符号、操作符符号、标识符符号
:
标识符:变量的名字、函数的名字、过程的名字
通常把一个标识符在符号表中的位置的整数值称之为该标识符的内部代码
在经过分析处理的语言程序中标识符不再是一个字符串而是一个整数值
:
除过程标识符之外函数和变量标识符都具有数据类型属性
对于函数的数据类型指的是该函数值的数据类型。基本数
据类型有整型、实型、字符型、逻辑型及位组型等,符号
的类型属性是在语言程序中该符号的定义中得到
变量符号的类型属性决定了该变量的数据在存储空间的存
储格式,还决定了该变量上可以施加的运算操作
例如t*2n、a+b
:
一种是用关键字指定,MAN来
定义公共存储区变量,用SAVE来定义函数或过程的内部静
态存储变量,在C语言中用static定义是属于文件的静态存
储变量或属性函数内部的静态存储变量,用regist定义使用
寄存器存储的变量
另一种方式是根据定义变量说明在程序中的位置来决定,
例如在C语言中,在函数体外默认存储类关键字所定义的
变量是外部变量,即程序的公共存储变量,而在函数体内
默认存储类关键字所定义的变量是内部变量,即属性该函
数所独有的私有存储变量