- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第9章 符号表(symbol table ) ? 9.1符号表的作用和地位 9.2符号的主要属性及作用 9.3符号表的组织 9.1 符号表的作用和地位 语义检查的依据 目标代码生成阶段地址分配的依据 一张符号表的每一项(或称入口)包含两大栏(或称区段、字域),即名字栏和信息栏。? 名字栏(NAME) 信息栏(INFORMATION) 第1项(入口1)? 第2项(入口2) ? … ? 第n项(入口n) ? 9.2 符号的主要属性及作用 符号属性 1 符号名 2 符号的类型 3 符号的存储类别 4 符号的作用域及可视性 5 符号变量的存储分配信息 6 符号的其它属性 (1) 数组内情向量 (2) 记录结构型的成员信息 (3) 函数及过程的形参 9.3 符号表的组织 总体组织 第一种: 把属性种类完全相同的那些符号组织在一起,构造出表项是分别为等长的多个符号表 第二种: 把所有语言中的符号都组织在一张符号表中。组成一张包括了所有属性的庞大的符号表 第三种: 折衷方式是根据符号属性相似程度分类组织成若干张表,每张表中记录的符号都有比较多的相同属性。 表项信息的组织 线性表-线性查找 按照关键字出现的顺序填写各个项。可以用一个一维数组或多个一维数组来存放名字及有关信息。 表项信息的组织 对折查找: 把表格中的项按名字的大小顺序整理排列。大小:名字的内码二进制值。 二叉树: 令每项是一个结点,每个结点附设两个指示器栏,一栏为left,一栏为right。每个结点的主栏内码值被看成是代表该结点的值。 要求: 任何结点p右枝的所有结点值均应小于结点p的值,而左枝的任何结点枝均应大于结点p的值。 表项信息的组织 杂凑技术 假定一个足够大的区域,来填写一张含有N项的符号表。 地址函数H:H(SYM):0-N-1 计算要简单、高效 函数值的分布比较均匀 杂凑链表:把所有相同杂凑值的符号名连成一串,便于线性查找。 它是一个可容N个指示器值的一维数组,初值为Null。 符号表:链接栏 关键字域的组织 简单的方式:让各项各栏所占的存储单元的长度是固定的。 关键字域的组织 间接方式:在符号表的主栏放一个指示器和一个整数,或在主栏仅放一个指示器。 指示器:标识符在字符数组中的位置 整数代表此标识符的长度。 符号表的例子: 编译程序按名字的不同种属分别使用许多符号表,如常数表、变量名表、过程名表等等。 SUBROUTINE INCWAP(M,N) 10 K=M+1 M=M+4 N=K RETURN END 符号名表SNT、 常数表CT、 入口名表ENT、 标号表LT和四元式表QT 符号名表SNT NAME INFORMATION (1)M 哑元,整数,变量 (2)N 哑元,整数,变量 (3)K 整数,变量 入口名表ENT ? NAME INFORMATION ?(1)INCWAP 二目子程序,入口QT(1) /*记录入口名INCWAP的入口地址*/ 四元式表QT 9.4 符号表的管理 符号表的初始化 1.? 符号表的表长是渐增变化的情况 线性组织的符号表,其表的长度(反映已登录表项个数)在编译开始时通常为‘0’,随着符号的逐步登录,表长增长。按照这类方法组织的符号表,其初始化方法只需要将表尾推向表头即可。 2.? 符号表的表长是确定的情况 散列组织的符号表,其表长通常是确定的,这时候的表长并不反映已登录的表项个数,是否已有表项登录是取决于该符号表中是否存在已有表项值的表项。因此对这类符号表的初始化方法,需要将表中全部表项值清除。由于通常表示表项值的关键因素是登录标识符的符号栏(也可能是指向符号的指针),因此在清除表项值时,实际上可仅清除符号栏。 符号的登录 线性方法:要在符号表中创立一个新的表项,通常该表的尾指针指向的表项是作为新创建的表项,而尾指针推向下一个备用表项。 对于二分法组织的符号表,在创建了新的表项后,根据登录符号的符号表中按词典排序所确定的位置,把该位置以后的所有原表项下移一个表项的位置,然后在选定位置登录新符号
文档评论(0)