- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第6章 符号表的组织与管理
符号表的组织与管理 6.1 符号表的作用 符号表是编译程序中主要的数据结构之一,用于存放程序语言中出现的有关标识符的信息,包括标识的类型(如实型、整型、布尔型)、种属(如数组名、变量名、过程名、函数名等)、作用域(如全局变量、局部变量、实例变量、私有变量等)。 1.词法分析时:每识别出一个标识符,都要查填相关信息。 2.语义分析时:符号表的内容辅助语义检查。 3.代码优化时:符号表的内容用于辅助进行代码优化。 4.目标代码生成时:编译程序将依据符号表中的符号名分配目标地址。根据符号表中关于符号和信息的说明,编译程序可以分别将符号表中的符号名安排在不同的存储区域,如数据共享区、静态存储区、动态存储区等。 2、3、4即符号表的作用 6.2 符号表的组织 符号表的结构中,每一项一般由两部分组成,第一部分是名字栏,或称主栏,其中的内容亦称关键字,查填符号表就是通过检验名字是否匹配实现的。 符号表的另一部分是与名字有关的信息栏,每一信息栏又包括若干子栏和标志位,用于记录标识符的不同特征。 由于处理对象的作用和作用域可以有多种,所以符号也有多种组织方式。按照处理对象的特点,一般可分为直接方式和间接方式。 直接方式是指在符号表中直接填入源程序中定义的标识符及其相关信息,如图6.1所示,名字栏的长度是固定的,对应的程序语言规定了标识符长度的最大值。 间接方式是指单独设置一个字符串数组,其中存放所有标识符,在符号表的名字栏中设置两项内容:指针和整数,指针指向标识符在数组中的位置,整数值表示标识符的长度,如图6.2所示: 其它方式:如按标识符的种属,即同一种属的标识符建立一张符号表:简单变量名表、数组名表、过程名表等等。 类似于标识符名的组织方式,信息栏的组织方式也可以分为两类:固定信息内容和记录信息地址。对数组名,需要存储数组的首地址、维数、每一维的大小、每一维的上下界等信息,一般把这些信息存放在一个叫“内情向量表”的地方,如图6.3所示。 对于函数名、过程名等含信息量较多且不容易规范长度的标识符,都可以用类似的方法建立专用信息表,存放那些不宜全部存放在符号表中的信息,同时在符号表中存放信息表的地址信息。 实现符号表的一种简洁而又实用的方法是链式表结构。(参见P135的一个例子) 6.3 符号表的建立与查找 1 线性表 查找效率 n/2 其中,n是标识符的个数,下同 二分查找和各种搜索树 (搜索树: 如二叉树、AVL树、B树) 二分查找的查找效率1+log2n。 二分查找的缺点:对于一个边填写边引用的不定长符号表,每填进一项就引起表中内容重新排序,需要付出时空代价。 二叉树的组织方式可以改进这一不足,在随机情况下二叉排序树的平均查找长度为: 1 + 4 log2n 查找速度低于二分查找,但由于左、右指针能动态生成结构,大大减少了排序的时间,是一种非常实用的方法。 3 散列法(亦称杂凑法、Hash法) 该方法的关键是设计一个散列函数Hash,使得能在一个确定的空间M中,对每一个标识符Ki,满足 0=Hash(Ki)=M-1 (i=1,2,…,n) 对散列查找法要设法解决由散列函数值不惟一而引起的“地址冲突”。用该方法组织的符号表,其上的插入、查找、删除3种基本操作都能在恒定的时间内完成,也是实践中常用的一种方法。 * *
文档评论(0)