第六章 符号表的组织与的管理.ppt

  1. 1、本文档共34页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第六章 符号表的组织与的管理

2. 变长块管理 ?根据需要分配长度不同的存储块,初始化时堆存储空间是一个整块。 ?初次分配时,按需要分割整块来分配;归还时,需要将新归还的块与现有空闲块进行合并,不能合并时,链成一个链表;再进行分配时,从空闲块链表中找出满足要求的一块进行分配。有多个满足要求的块时,按以下三种策略进行分配: (1)首次匹配法: (2)最优匹配法: (3)最差匹配法: (2)适用于请求分配的内存大小范围较广的情况;(3)适用于请求分配的内存大小范围较窄的情况。 8.5 临时变量的存储分配 ?临时变量是编译时为暂存中间结果而引进的,对于代码优化很有好处。都是简单变量。 ?如果两个临时变量名的作用域不相交,则可以共用一个存储单元。因此,对新的临时变量名分配存储单元时,只有当它的作用域与所有已分配的临时变量的作用域冲突时,才分配一个新单元。此时,单元的分配信息包括相应变量名的作用域。 例如,用于暂存表达式中间结果的临时变量,只存在一次定值和一次引用,并且在定值和引用之间不存在分叉转移。其作用域的确定非常简单,因而其存储分配也可以用一种非常简易的办法(栈)实现。 临时变量的栈式地址分配: 赋值语句:X=A*B-C*D+E*F 四元式序列: 四元式 临时变量名 (1)* A B T1 T1 (2)* C D T2 T2 (3)- T1 T2 T3 T3 (4)* E F T4 T4 (5)+ T3 T4 T5 T5 (6)= T5 X STACK k 对于引进的五个临时变量,只需分配两个临时工作单元。 地址 a a+1 a a+1 a 临时变量的栈式地址分配: 赋值语句:X:=A*B-C*D+E*F STACK k 代真后的四元式序列: 四元式 (1)* A B $a (2)* C D $a+1 (3)- $a $a+1 $a (4)* E F $a+1 (5)+ $a $a+1 $a (6)= $a X ?对于概念复杂的表达式,则不能用上述简单办法来分配。 第六章 符号表的组织与管理 符号表(Symbol Table) 作用:记录源程序中各种标识符的属性和特征等有关信息。 内容:名字,有关信息(种属、类型等) 表项的建立: 运用:语义检查、产生中间代码、地址分配的依据 6.1 符号表的作用 ?在编译的各个阶段,每当遇到标识符时,都要查找符号表。 因此,合理组织符号表,使其占用的存储空间较少、易于访问,对提高编译的效率很重要。 ?根据说明语句的功能,记录标识符的相关信息 ?为上下文语义的合法性检查提供依据 ?生成目标代码时,符号表的内容是分配存储地址的依据 符号表的表项包括名字栏和信息栏 ?查填符号表一般通过匹配名字来实现。 ?对符号表的操作一般有: 对给定的名字,查询其是否已在表中; 添加新名字; 访问某个名字的某些信息; 添加或更新某个名字的某些信息; 删除一个或一组无用的项。 6.2 符号表的组织 符号表的内容:名字栏、信息栏 符号表的信息栏中记录了每个名字的有关性质,如类型、种属、大小、以及相对数等。 不同的程序语言对于名字性质的定义各有不同。 一个名字的有关信息常常是分几次填入信息栏中的。 符号表中信息栏的具体组织取决于所翻译的具体的源语言和目标机器。 6.2 符号表的组织 ?直接方式:表中各项各栏的长度固定。 ?间接方式:符号表中的相应栏存指针,指向存储具体信息的位置。 符号表 NAME INFORMATION ,6 ,4 S A M P L E L O O P 6.2 符号表的组织 ?按标识符的种属分别建立符号表。  简单变量名表   数组名表   函数名表   ... ?符号表信息栏的组织方式:  固定信息栏内容的符号表;  仅记载信息地址的间接方式。 ?设置信息栏内容时,要考虑标识符的作用域。   符号表的实现: ?可采用链式表结构: 所有的标识符构成一个标识符链 所有函数名构成一条函数链 每个函数都有一条函数参数链 每个函数都有一条局部变量链 表单元的具体结构如P140-141 6.3 符号表的建立与查找 编译工作的相当一大部分时间是花费在查填符号表上。 如何构造和处理符号表? 线性表、二叉树、Hash表 1、 线性表 实现最简单,节省空间,效率

文档评论(0)

liwenhua00 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档