




已阅读5页,还剩15页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第八章 符号表,8.1符号表的组织与作用编译过程符号表的作用,一、符号表的作用遇到名字查表、登记、修改,目的:合理地组织符号表。 构成:符号表的每一项包含名字栏和信息栏。表格形式如下所示:,第一项 (入口1),第二项 (入口2),第n项 (入口n),名字栏用来存放标识符或其内部码;信息栏包含许多子栏和标志位,用来记录与该项名字相对应的种种不同属性。,(5)从表中删除一个或一组名字。,操作:对于符号表的访问可概括为如下几类操作:,(1)对给定名字,查询此名是否已在表中;,(2)往表中填入一个新名字;,(3)对给定名字,访问它的相关信息;,(4)对给定名字,往表中填写或更新它的某些信息;,符号表组织方式: 简单方式:固定二维表 间接方式:使用主表指针独立的字符串数组(标识符名),二、符号表的组织方式,1、各项各栏所占存储单元的长度固定,2、间接方式安排名字栏,符号表的结构,如果各种名字所需的信息(INFORMATION )空间长短不一, 那么,我们可把一些共同属性直接登记在符号表的信息栏中, 而把某些特殊属性登记在别的地方,并在信息栏中附设一指示 器,指向存放特殊属性的地方。,特殊属性的登记:例如:对于数组标识符,专门开辟一个信息表区,即为数组信息表也称为内情向量表,内情向量表,在符号表的地址栏中存入符号表与内情向量表连接入口地址,符号表,(1)把每一项置于连续的K个存储单元中,从而给出一 张K*N个存储单元的表。,(2) 把整个符号表分成M个子表,每个子表含N项。假定子表Ti的每一项所需的字数为Ki,那么,K=K1+Km。对于任何i,T1i,Tmi的并置就构成符号表第i项的全部内容。,一张可容纳N项的符号表在存储器中的两种表示方式:,K=K1+K2+K3+K4,例8.1 FORTRAN符号表,程序段: SUBROUTINE INCWAP(M,N) 10 K=M+1 M=M+4 N=K RETURN END 主要表格见p225,8.2 整理与查找,一、线性表,2、提高查找效率的办法:给每一项附设一个指示器,这些指示器把所有的项按“最新最近”访问原则连接成一条链,这条链的第一个元素所指的项是最新最近被查询过的项,第二个元素所指的项是次新近被查询过的项,诸如此类。每当填入新项时,总让链头指向最新项,含有这种链条的线性表叫做自适应线性表。,1、线性表介绍,符号表的三种构造法和处理法:,线性查找、,二叉树、,杂凑技术。,线性符号表,平均查找次数,n/2,二、对折查找与二叉树,(3)若要查找的项大于中项,则 就到n/2+2n的各项中去查找。,在造表的同时把表格中的项按名字的“大小”顺序整理排列。,所谓名字的“大小”通常是指名字的内码二进制。,对于经顺序化的表格的查找可用对折法。,对折法的查找方法如下:,(1)首先把要查找的项和中项 (即第n/2+1项)作比较,若 相等,则宣布查找成功。,(2)若要查找的项小于中项, 则继续在1n/2的各项中去查找。,顺序化的线性符号表,平均查找次数,1+log2n,二叉树的形成过程如下: 令第一个碰到的名字作为“根”结点,它 的左、右指示器均置为空,当要加入新结点时,首先把它和根结点的值作比较,小者放在右枝上,大者放在左枝上。如果根结点的左(右) 枝已成子树,则让新结点和子树的根再作比较。重复上述步 骤,直至把新结点插入使它成为二叉树 的一个端末结点(叶)为止。,把符号表组织成一棵二叉树(二叉排序树),令每项是一个结点,每个结点附设两个指示器栏,一栏为LEFT (左枝),令一栏为RIGHT(右枝)。每个结点的主栏内码值被 看成是代表该结点的值。要求:任何结点P右枝的所有结点值均应 小于结点P的值,而左枝的任何结点值均应大于结点P的值。,根,LEFT,RIGHT,0,0,三、杂凑技术,1、假定有一个足够大的区域,这个区域用来填写一张含N项的符号表。构造一个地址函数H,对任何名字,H函数的取值于0至N-1之间。即不论对此项查表或填表,都能从H函数中获得它在表中的位置。,2、对地址函数H有两点要求: (1)函数的计算要简单、高效; (2)函数值能比较均匀的分布在0至N-1之间。,3、构造函数H的办法:,直接地址法、数字分析法、平方取中法、 折叠法、除留余数法、随机数法,4、解决地址冲突的办法:,开放地址法、再哈希法、链地址法(p228)、 建立一个公共溢出区,3、填入一个新的项的过程: (1)先计算出H函数的值h(在0与N-1之间),将HASHTABLEh 的值赋给P(若未曾有杂凑值为h的项名填入过,则将P置空)。 (2)然后将指针指向HASHTABLEh,再把新名及其链接指示 器的值P填进指针所指向的符号表位置。,4、使用此方法的查表过程如下: 首先计算出此项的函数H的值等于h,然后就指示器 HASHTABLEh所指的项链逐一按序查找(线性查找),杂凑技术:使用一张杂凑链表通过间接方式查添符号表。,将具有相同杂凑值符号名连成一串,便于线性查找。杂凑表是一 个可容纳N个指示器值的一维数组,它的每个元素的初值全为null。 符号表除了通常包含的栏外,还增设了一链接栏,他把所有持有相 同杂凑值的符号名连接成一条链。,available,SYM1,H(SYM1)=h,p=HASHTABLEh=null,HASHTABLEh=AVAVILABLE=n1,SYM1,n1,null,available,SYM2,H(SYM2)=h,p=HASHTABLEh= n1,HASHTABLEh=AVAVILABLE=n2,n2,SYM2,n1,SYM3,H(SYM3)=h,p=HASHTABLEh= n2,HASHTABLEh=AVAVILABLE=n3,n3,SYM3,n2,available,available,8.3名字的作用范围,对于过程嵌套结构型的程序设计语言,每层过程中说明的名字 只局限于该过程,离开了所在的过程就无意义了。也就是说, 同一个标识符,具有不同的性质,要求分配不同的存储空间。 这样,如何组织符号表,使的同一个标识符在不同的作用域中 能得到正确的引用,而不会产生混乱。,通常实现最近嵌套作用域规则的办法是:对每个过程指定一个 唯一的编号,即过程的顺序号,以便跟踪过程里的局部名字。,在符号表中,表示局部名字用一个二元组:,对一个名字查找符号表的原则: 只有当表项中的名字的字符逐个匹配,并且该记录相关的编号和当前所处理的过程的编号匹配时,才能确定查找成功.,一、Pascal的符号表组织,1、在Pascal程序中标识符的作用域是包含说明该标识符的一个最小分程序。具体的概括为如下几点:,(1)如果一个标识符在某一分程序首部已作说明,则不论此分程序 是否含有内层分程序,也不论内分程序在嵌套多少层,只要在内 层分程序未再次对该标识符加以说明,则此标识符在整个分程序中 均有定义,且有相同的属性。,(2)程序中的标号局限于定义该标号的最小分程序。,(3)由于Pascal程序中的过程可具有嵌套的结构,因此,可将每 一过程说明都假想为一个分程序。出现在过程体中的非形式 参数,依其在相应的过程体中被说明与否,确定它们对过程而言是局部变量还是非局部变量,而形式参数则总是局限于相应 的过程体的。,PASCAL程序中的标识符(或标号)的作用域,总是与说明(定义) 这些标识符的分程序的层次相联系的。,(1) 针对符号表设计为栈符号表,新名字出现总是从栈顶填入。为了保证从内层向外层查,查找操作从符号表的栈顶往底部查找。,2、对于嵌套结构型程序设计语言(Pascal)的特点,可采用如下 办法:,(2)过程的嵌套层次表(display),是引入的一个显示层次关系表。其作用是为了描述过程的嵌套层次,指出当前正在活动着的各嵌套的过程(或函数)相应的子符号表在栈符号表中的起始位置(相对地址)。 Display表也是一个栈,栈顶为level,用来指示层次,即指向当前的最内层过程的子符号表在栈符号表中的起始位置。,(3)在符号表的信息栏中引入一个指针域(previous),用来链接它在同一个过程内的下一名字在表中的下标(相对位置)。每一层最后一个域名字,指针域之值为0。这样每当需要查找个新名字时,就能通过display表找出当前正在处理的最内层的过程及所有外层的子符号表在栈符号表中的位置。然后通过指针域可以找到同一个过程内的所有被说明的名字。,例: procedure/B1 var a,b:real; procedure/B2 var c,d:real; procedure/B3 var e,f:real; begin end; begin end; begin end;,栈符号表,DISPLAY,a,b,top,sp,1,level,level,2,0,B2,c,d,top,sp,4,level,3,0,5,0,B3,e,f,top,sp,7,level,6,0,8,0,8.4 符号表的内容,(1)类型(整、实、双实、布尔、字符、复、标号或指针等); (2)种属(简单变量、数组或记录结构等); (3)长度(所需的存储单元数); (4)相应对数(存储单元相对地址); (5)若为数组,则记录其内情向量; (6)若为记录结构,则把它与其分量按某种形式联系起来; (7)形式参数标志; (8)是否对这个变量进行过赋值(包括出现在输入名表
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 机电设备动力系统安装方案
- 养鸭场病害防治管理体系方案
- 混凝土质量验收标准方案
- 水稻种植培训课件
- 水稻大变身课件
- 水稳施工方案课件
- 中药养护习题解析91课件
- 二零二五年度新能源技术研发与推广服务合同协议书
- 二零二五年度团体服饰定制合同范本
- 二零二五年度发行公司债券担保及债券发行风险合同
- 刑法基本原则课件
- 2025年会议接待考试题库
- 2025年贵州省中考英语试卷
- 政府职能边界界定-洞察及研究
- 新疆疫苗管理办法
- 2025年重庆出租车资格证区域考试题库区域考试
- 广州市越秀区招聘卫生健康系统事业单位事业编制人员考试真题2024
- 医疗废物监督管理课件
- 全国律师会费管理办法
- 危险源辨识、评价及控制培训
- 延缓慢性肾脏病进展临床管理指南(2025年)解读课件
评论
0/150
提交评论