第8章符号表2.0.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文档。上传文档
查看更多
第8章符号表2.0

;;为了便于查错和改错,可以记录前面是否已经打印过象“变量A未定义”这样的出错信息,以免重复。 对于多遍扫描的编译器,不同遍的表也往往不同。 本章主要讨论 : 设计表的主要问题是登记项的格式, 表的组织和访问的方法, 访问的格式, 存放的位置(主存或者辅存)。 ;;我们要求它具备以下几种功能: 1,确定一个给定的名字是否在表中; 2,填入新的名字; 3,访问所给名字的有关信息; 4,对给定的名字,填写和更新它的有关息; 5,删除一个或者一组名字 ;6.1.2 分表 语言中,名字表示各种类型的对象:变量名,过程名,常 数,域名(结构),标号等,由于各种类型的名字因用法 不同,栏目及所需的空间相差很大,因此往往独立建表, 由此带来的负面影响是:导致零头太多。如果登记项格式 可以变化,则另外一个表也可以; 如果禁止把关键字作为标识符,则应把关键字先进表,标 函也进表.;6.1.3 符号表内容的细目 1,表示名字的字符串+编号,如果多个程序块或过程中可以使用同一标识符,则必须指出这个名字属于哪一个程序块或过程; 2,名字的属性(包括类型和种类)以及识别名字用途的信息(标号, 形参,数组) 3,参数(维数,下标的上下界) 4,描述分配给名字存储单元的位置的偏移量;6.1.4 符号表登记项的建立 a, 符号表名字何时建立: 1,词法分析。当识别了一个标识符时,它可以建 立,不能填充种类,类型等; install 子程序返回 ($ID, 符号表指针); 2,但是当一个名字在同一个程序块或过程中,可用作标号、实型变量、域名时,词法只能返回($ID, TOKEN),由语法分析程序为标识符建表 ;b, 这些信息在不同的时刻插入符号表: 1,遇到显式说明时,把属性插入; 2,语法可以隐含的说明变量的某种用途,如标号 后的 : ,所以和产生式 语句- id:语句 相关的语义动作是把 id 为标号的事实插入符号表,标号链,定义否填入; 3,地址分配; 类似,过程说明的语法告诉我们某些名字是形参。 ;6.1.5 名字和符号表记录 实现表的最简单方式是看成记录的线性数组,每一栏??所占存储单元长度不变,每个名字对应一个记录,记录通常由已知个连续的存储字组成。;;1,当一个名字的最大长度不太长时,如FORTRAN为8字符, 用2个字存储,其余补空; 2,ALGOL 名字不限, PL/1 31个(8个字), 则采用间接方式,专门字符数组,这样使表的名字域大小不变; 对于其他的域也可以这样办理,(技术性工作). ;把整个符号表分成若干子表;6.1.6 符号表空间的重新使用 符号表占用空间很大,且信息更新,故有重新使用空间的问题,那些空间不可用呢? 程序员用来表示名字的标识符,必须一直保存在符号表中,直到不再引用为止,以便该标识符只能代表同一个名字,这是必要的,它使标识符的所有使用与符号表登记项相结合(表中有的内容在以后不再使用了),从而是同一个名字。 但是,如果用来存放标识符的空间在下一次能重新使用,那么用少量空间就能解决问题。;例如,在以后几遍中,放名字的数组可以释放,所以设法回收用来存储标识符的空间,(事实上,图9.1b 第一字也能回收) 方法:用两个而不是一个数组来存放记录;有效地加入新项和找出有关项,本节主要讨论三种机制: ;线形表的效率估计 插入名字的工作量与表长 n 成正比 查找的工作量平均 n/2 访问的工作量与表长 n 成正比. ;;1,自适应表Link 的原则;2,做法;3,算法:可以写出把NAME i 移到头上来的算法;算法: 1,若Link p = i, 则记下 p ; 若Link i = q, 则q ? Link p ; //这样,i 就脱离了 2,若原FIRST ? r, 则记 r ? Link i ; 3, 让FIRST ? i; ;二,折半查找;进一步的改进;评价; left;构造过程:;评价;思考:;三,直接取表法;优点:;四,混列表 (hash table, computed entry table, scatter table);混列表---定义;A, 开放的混列表;;定语开放:;需要考虑的问题:;B, 溢出混列--- 表未满的溢出项处理: 溢出项插入到一个完全独立的表中,如果溢出项不多,可用线性 查表法作溢出表的工作; 如果表很大,此法有局限性。;D,使用内链的溢出混列:;映像函数的构造:;方法:;6.3 名字的作用范围 ;二,FORTRAN 的符号表组织:;2, 多遍扫描: 处理完一段之后,应该把它的局部名表保存到外存中,因为后续遍要 用 注意: 1, 由于符号表的现行局部名表是可覆盖的,当词法分析后,名字的 字符串已经由符

文档评论(0)

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

分享好文档!

1亿VIP精品文档

相关文档