1、第9章 符号表,符号表的作用和地位符号的主要属性及作用符号表的组织符号表的管理,9.1 符号表的作用和地位,符号表的作用:存放程序中标识符的属性。 收集符号属性如:符号的名称、类型、数组维数、每一维长度等 作为上下文语义的合法性检查的依据 作为目标代码生成阶段地址分配的依据因为每个符号变量在目标代码生成阶段需要确定其在存储分配的相对位置。,9.2 符号的主要属性及作用,符号名 变量名、函数名、过程名等,重载信息 符号类型 整型、实型、字符型、布尔性、位组型等,函数的类型看返回值。还有扩充的符合数据类型:数组、记录等 类型决定了该变量的数据存储格式、可以施加的运算操作 符号的存储类型 commo
2、n、static、auto、regist(寄存器变量) 符号类型属性是编译过程语义处理、检查和存储分配的重要依据;还决定了符号变量的作用域、可视性和生命周期等。,9.2 符号的主要属性及作用,符号的作用域及可视性 作用域:一个符号变量在程序中起作用的范围 可视性:变量可以出现的场合 某变量作用于范围内,该变量是可视的 函数的形参影响变量可视性 复合语句分程序结构影响变量可视性 注意public、private等 符号变量的存储分配信息 静态存储区、动态存储区 符号的其他属性 数组内情向量、结构成员信息、函数及过程的形参,9.3 符号表的组织,符号表的总体组织符号表项的排列关键字域的组织其他域的
3、组织下推链域的组织,一、符号表的总体组织,把属性完全相同的符号组织在一起 优点:表项等长、单个表容易管理 缺点:表较多、总体管理较复杂 把所有符号放在一张表中 优点:相同属性处理一致、总体管理简单 缺点:表项不等长、表项复杂、空间浪费 根据属性相似的符号组织在一张表中 总体管理的复杂性和时空效率都取得了折衷的良好效果。,二、符号表项的排列,线性组织 根据扫描到的符号先后顺序建立 优点:管理简单,存储空间效率高 缺点:运行效率低,符号表长度不能确定 适合于较少符号的组织,. a. .b. .a. .d. .c. b,排序组织及二分法 将符号按名称排序(词典排序) 优点:查找迅速(二分法查找),空
4、间效率高 缺点:算法复杂如:搜索到新符号后,将其插入到表中,须采用链表组织散列组织及杂凑法 用hash函数将符号名映射成整数 优点:运行效率高、算法复杂度比排序组织低 缺点:对变量符号很难找到高效的hash函数,三、关键字域的组织,关键字域就是符号本身,包括保留字、操作符和标识符。 关键字域的组织: 等长关键字段符号表:P215 图9.9 关键字池组织的符号表:符号表中的关键字段为指向该关键字在池中位置的指针。P215-216 图9.10 关键字池的结构: 字符数组:符号表中的关键字段是该关键字在池中的位置; 字符串:符号表中的关键字段是指向该关键字在池中位置的指针。,四、其他域的组织,等长属
5、性值域组织 是否已被定义标记(1bit) 数据类型编号(3bit) 存储类别编号(n bit) 相对存储区头的位移量(整型量) 符号之间的关系(指针、指针链) 如:函数名和它的参数之间的关系,结构与成员之间的关系,不等长属性值域的组织 如:数组(一维、多维) 表项中存放数组信息(内情向量)的指针,内情向量存放于内情向量的空间中,五、下推链域的组织,用于分程序结构 相同的变量名具有不同的作用域,但可以同时存在 如:同名的全局变量和局部变量,嵌套的语句块的内外层的同名变量的声明。 使用指针将它们链在一起,符号表中只存放最内层的变量,其他变量放在下推链(表)中;当扫描退出一层时,从下拉链中回推到符号表中。,