第9章-符号表.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文档。上传文档
查看更多
* * * * * * * * * * * * * * * * 第9章 符号表管理技术 在编译的各个阶段经常要收集、使用出现在源程序中的各种信息,通常把这些信息用一些表格进行记录、存储和管理,如常量表、数组信息表等等,这些表统称为符号表。 符号表的作用∶ 保存各类标识符的属性 检查语义的正确性 作为目标代码生成阶段地址分配的依据 符号表的作用是通过插入和检索符号表中记录的标识符属性来实现的。这些属性(如名字、类型、维数等)在声明语句中可直接找到,有些可根据程序中标识符出现的上下文间接地获得。 在编译时,源程序中每出现一次标识符,就要与符号表打一次交道,主要工作是查表和存取操作,因此,与符号表的交互占据了大量的编译时间。所以,如何有效地操作符号表直接影响编译的效率。 第9章 符号表管理技术 符号表的作用∶ 检查语义的正确性 上下文敏感成分的分析实质上是语法分析的内容。但我们的语法分析是以上下文无关文法为基础的,没有考虑上下文敏感成分的处理,所以必须在语义分析时加以考虑。 属于上下文敏感的语法规定包括: 标识符通常先定义后使用,但在同一个块中,标识符不应重复定义; 实参表中的实参个数与类型必须与相应形参表中的形参个数与类型一致; 表达式中运算对象的类型必须与运算符相容,等等。 第9章 符号表管理技术 符号表的作用∶ 作为目标代码生成阶段地址分配的依据。 对于变量标识符,在目标代码生成时需要确定其存储分配的位置。主要依据符号变量的存储类别及被定义的位置来确定。 何时建立和访问符号表 有的编译程序中,符号表在词法分析阶段创建,符号表此时只含有标识符的名字,其它属性要在语义分析阶段填入。 当从源程序中识别出一个标识符时,就以此名字查符号表,若表中尚无此登记项,则将该名字列入表中。 语法分析阶段只检查源程序语法的正确性,一般不使用符号表。 符号表可在词法分析时创建,也可在语义分析时创建。 何时建立和访问符号表 有的编译程序,只在语义分析时才创建符号表。在语义分析阶段,遇到声明语句时会根据标识符的类别、名字属性创建符号表记录。同时对源程序代码需要检查语义的正确性。 在符号表中记录的标识符的属性信息会在代码生成阶段用于产生目标代码的指令序列。 因此,直到语义分析和代码生成阶段,许多与变量有关的属性才能够相继填入符号表。 总之,如果在词法分析阶段创建符号表,只能在符号表中将标识符的名字填入符号表,而其他属性则要在语义分析和代码生成阶段填入。如果在语义分析阶段创建符号表,那么与符号表打交道的就仅局限于语义分析和代码生成部分。 符号表的组织和内容 符号表的管理程序应该具有快速查找、快速删除、易于使用、易于维护的特点。符号表具体包含哪些内容,属性的种类和多少在一定程度上取决于程序设计语言的性质。 符号表基本上都是由一些表项组成的二维表格,每个表项可分为两部分: 第一部分是名字域,用来存放符号的名字; 第二部分是属性域,用来记录与该名字相对应的各种属性和特征。 符号表的组织和内容 几种主要属性通常是需要的。 1.名字 2.符号类型 3.符号存储类别 4.符号的作用域及可视性 5.符号变量的存储分配信息(目标地址) 6.符号的其它属性 符号表管理技术 名字:名字必须常驻在表中,因为它是在语义分析和代码生成中识别一个具体标识符的依据。在符号表的组织中,一个要解决的重要问题是标识符长度的可变问题。对标识符名字的处理要考虑语言中对标识符长度的规定是定长还是不定长。根据标识符的定义特点,通常采用的存储方法有两种: ① 定长存贮方法,即为标识符名字域规定一个宽度,标识符按左对齐方式存放在其中,特点是简单且存取速度快,缺点是空间利用率低,标识符长度不能超过名字域的宽度。 ② 集中存贮方法,即开辟一个存放所有标识符的缓冲区,而在标识符名字域中只存放标识符在缓冲区中的偏移地址和标识符的长度。特点是存贮效率高,标识符无长度限制,但存取效率低。 ComputerX1FORM1 名字位置 名字长度 其它属性 1 8 9 2 17 5 … … 图1 集中存贮方法符号表 目标地址:标识符主要作为变量名字。程序中每个变量都必须有一个相应的目标地址,该地址是为该变量分配的内存地址(可能是相对的)。 当声明一个变量时,就要为该变量分配内存地址,并将其分配的地址填入符号表中。当该变量在程序的其它处被引用时,可以从符号表中查询该地址,并填入存取该变量值的目标代码中。

您可能关注的文档

文档评论(0)

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

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

1亿VIP精品文档

相关文档