编译原理-第八章.pptVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
编译原理-第八章

TJNU-COCIE-WJW 编译原理 ——第八章 符号表 王金伟 计算机与信息工程学院 天津师范大学 第八章 符号表 8.1 符号表的组织与作用 编译过程中,记录源程序中出现的各种名字的属性和特征等有关信息。 编译过程中,每当扫描器识别出一个名字后,就查符号表,看是否在其中,若是新名字就填进表里。该名字的有关属性信息将在词法,语法,语义分析过程中陆续填入。 在语义分析中符号表中的信息用于语义检查(如检查一个名字的使用和其声明是否一致)以及产生中间代码。 在目标代码生成阶段,对符号名进行地址分配时,符号表示分配的依据 符号表的每一项(入口)包含两大栏: 名字栏,也称主栏,关键字栏 信息栏,记录相应的不同属性,分为若干子栏. 符号表的操作大致可归纳为五类: ? 对给定名字,查询名字是否已在表中; ? 往表中填入一个新的名字; ? 对给定名字,访问它的某些信息; ? 对给定名字,填写或更新它的某些信息; ? 删除一个或一组无用的项。 上述五个方面只是一些基本的共同操作 对符号表进行操作的时机: 定义名字时 使用名字时 按名字的不同种属建立多张符号表,如常数表、变量名表、过程名表、… 1. 安排各项各栏的存储单元为固定长度 2. 用间接方式安排各栏存储单元 (1) 把每一项置于连续K存储单元中,构成一张K*N的表 (2) 把整个符号表分成m个子表,如T1,T2,…Tm,每个子表含有N项. 例: PASCAL程序段: PROCEDURE INCWAP(M,N:INTEGER); VAR K:INTEGER; BEGIN 10: K:=M+1; M:=N+4; N:=K; END. 经编译后产生的表格有: 符号名表:SNT 常数表:CT 入口名表:ENT 标号表:LT 四元式表:QT PROCEDURE INCWAP(M,N:INTEGER); VAR K:INTEGER; BEGIN 10:K:=M+1; M:=N+4; N:=K; END. PROCEDURE INCWAP(M,N:INTEGER); VAR K:INTEGER; BEGIN 10:K:=M+1; M:=N+4; N:=K; END. 8.2 整理与查找 编译过程要反复添加查找符号表,故符号表的组织与查填技术十分关键 三种构造、查填符号表的方法: 线形查找 二叉树查找 杂凑技术(hash表) 按关键字出现的顺序填写各项。 结构简单,节省空间 ,填表快 效率低,查找时间复杂度:O(n), 查找慢。 改进:自适应线性表 在符号表的基础上,建立一个“最近访问”链表,使得该链表的表头是最新最近被查过的项。 每次查找时,查找该链表,查到了就更改该链表,使表头指向刚查过的项。 * * 8.1 符号表的组织与作用 8.2 符号表的整理与查找 一、符号表的作用 二、符号表的组织 1. 安排各项各栏的存储单元为固定长度 优点:容易组织、填写和查找 缺点:浪费存储空间,如最长名字为255个 2.用间接方式安排各栏存储单元 (1)对于名字栏 可用一个独立的字符串数组,把所有标识符都存在这个数组里,在符号表的名字栏中存放一个指示器和一个整数,或仅放一个指示器,在标识符前方一个整数。 指示器指出该标识符在数组中的位置,整数代表该标识符的长度。 (2)对于信息栏 把一些共同属性直接登记在符号表的信息栏中,而把某些特殊属性登记在别的地方,并在信息栏中放置一个指示器,指向存放特殊属性的地方。 例如:对于数组标识符,需要存储维数等信息,可以专门开辟一个信息表区:数组信息表(内情向量表),将数组的有关信息填入此表,在符号表的信息栏中存放一个指向内情向量表的指针。 过程名以及其他含有信息较多的名字都适用。 三、符号表的存放次序 一、线形查找 一、线形查找(续) 表格中的项按名字的“大小”顺序整理排列。 填表慢 查找快。查找时间复杂度:O(Log2n) 二、对折查找与二叉树 改进:组织成二叉树。 线形表:填表快,查表慢 对折法:填表慢,查表快 为了提高查表和填表的效率可以采用杂凑函数H(SYM):0~N-1 假设有一个含有N项的符号表,以任何名字的内码SYM作为参数,调用杂凑函数H,得到一个0~N-1之间的数,对应N项符号表项。 三、杂凑查找(HASH技术) 优点:填表快,查找快 对杂凑函数的要求: 1. 计算简单高效 2. 函数值分布均匀 例如:可以用mod运算(取余数)作为H函数, 如另N=17,则H(SYM)为SYM mod 17 H(’05’)=H(’22’)=5 ’22’对应的符号放哪里? 三、杂凑查找(HASH技术) 在符

文档评论(0)

wyjy + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档