More Related Content
More from tjpucompiler (11)
第9章 符号表
- 2. § 9.1 符号表的作用
§ 9.2 符号的主要属性
§ 9.3 符号表的组织
§ 9.4 分程序结构符号表的管理
2
- 4. 1. 收集符号属性
在编译程序中符号表用来存放
语言程序中出现的有关标识符的属性信
息,符号表中所登记的信息在编译的不
同阶段都要用到。
4
- 8. 1. 符号名;
2. 符号的类型;
3. 符号的存储类别;
4. 符号的作用域及可视性;
5. 符号变量的存储分配信息;
6. 符号的其它属性 :数组内情向量
记录结构型
的成员信息
函数及过程 8
的形参
- 14. 符号表项的排列
符号表作为一个多元组,表中
元组的排列组织是构造符号表的重要成
分。在编译程序的整个工作过程中,符
号表被频繁地用来建立表项,找查表项
,填充和引用表项的属性。因此表项的
排列组织对该系统运行的效率起着十分
重要的作用。
在编译程序中,符号表项的组
织传统上采用三种构造方法。即线性法 14
,二分法及散列法。
- 15. 1. 线性组织:符号表中的表项按它的
符号被扫描到的先后顺序建立。
2. 排序组织及二分法:符号表中的表
项按其符号的字符代码串的值的大小
从大到小 ( 或从小到大 ) 排列的。关
于排序表的表项建立及查找,通常采
用 “ 二分法 ” 。
3. 散列组织:散列表中的表项位置是
由对表项的符号值进行某种函数操作
( 杂凑 ) 所得到的函数值来确定的。 15
- 16. 三种方法的比较
线性法
简单直观,易于实现
低效,平均查找次数: E=n/2
适合于表项不多的表
二分法
高效,平均查找次数上界: E<=log2n+1
插入时需要保持表项的有序性
适合于比较固定的表
杂凑法
平均查找次数与表的填满程度密切相关
要求有足够长的定长存储空间
16
特别适合大容量的表
- 18. 符号表中分程序结构层次的管理
对于具有分程序型结构的语言
程序,不同层次分程序中定义的标识符
号具有不同的作用域和不同的可视性规
则。
通常对于具有分程序结构的语
言可用两种方式组织它们的符号表:
1. 对每个分程序建立一个独立的分表
结 构的符号表;
2. 把各分程序符号组织在一张单表结 18
构的符号表中 。
- 19. 分表结构的组织管理
其基本思想是,每当编译程序
扫描到一个分程序结构开始时,为该分
程序建立一张符号表,在该分程序中定
义的标识符,都被登录在该符号表中。
而当编译程序扫描到一个分程序的结束
时,编译程序释放为该分程序所建立的
符号表。这种符号表的分表结构与源程
序的分程序层次结构一一对应。
19
- 20. 单表结构的组织管理
其基本思想是,所有分程序中
定义的标识符都集中在单张符号表中。
为了实现分程序构造中标识符的作用域
和可视性规则的要求 , 在符号表中可设
立一个属性域用来登录符号所在分程序
的层次。
进入分程序时,层次要增加
一层。在退出一个分程序时,层次降低
一层,且需要把符号表中,所有在退出
的分程序中登录的符号项清除。 20