符号表-NEW..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文档。上传文档
查看更多
主要内容 符号表的介绍 说明语句的翻译 数组元素的引用 符号表 符号表是连接声明与引用的桥梁。一个名字在声明时,相关信息被填写进符号表,而在引用时,根据符号表中的信息生成相应的可执行语句。 如何有效记录各类符号的信息,以便于在编译的各个阶段对符号表进行快速、有效的查找、插入、修改、删除等操作,是符号表设计的基本目标之一。 符号表的管理贯穿整个编译过程,既涉及到前端,也涉及后端,尤其与后端的存储空间分配有密切联系。符号表的内容一般仅在编译时使用,如果名字的具体信息需要在运行时确定或使用,则符号表的部分内容还要保留并运行,例如动态数组和跟踪调试信息等。合理组织符号表的内容,以适应不同阶段的需要,也是符号表设计需要考虑的问题之一。 符号表的作用 符号表用来存放程序设计语言中出现的有关标识符的属性和特征。 符号表在整个编译期间的作用可归纳为以下几个方面: 1、将标识符的名字及属性登陆到符号表中 在分析说明语句的时候,编译程序根据说明语句信息将标识符的相应属性,例如标识符的类型:实型、整型,布尔型等;标识符的种属:数组名,变量名,过程名,函数名等登录到符号表中。 2、辅助上下文语义的正确性检查 例如对运算对象和运算符进行类型检查,对变量进行先定义后使用检查等。 通过符号表中的属性记录可进行上述语义检查。 作用域 符号表 符号表-lookup Symbol Table Lookup 符号表操作 插入 插入新的符号 插入到当前作用域中 查询-lookup 在符号表中找到一个符号 可能引起到父表中查找 当符号没有找到的时候报错 符号表类似一个仓库 之一:可通过遍历AST构建符号表 3、辅助目标代码生成 在目标代码生成阶段,符号表是数据存储分配的依据。要形成能运行的目标代码,需要对程序中应用的标识符分配存储单元,而存储单元的分配与标识符属性相关,与属性相关的信息可通过查符号表获取。 符号表的生存期 符号表的建立可以开始于词法分析阶段,也可以放到语法、语义阶段,但符号表的使用有时会延续到目标代码的运行阶段。如数组下标地址计算的需要等。 在词法分析的时候,仅把标识符的名字属性放到符号表中。其他属性都为空。 符号表中的内容 保存的信息: 标识符的名字和与标识符有关的信息 1、类型信息 包括种类与属性 种类:常量、变量、数组、标号或函数等 属性:整型、实型、字符型、布尔型等。 数组(如果是数组的话) 包括维数,界差,上下界,计算下标地址时涉及的常量等。这些信息放在数组信息向量表(内情向量表)中。 函数或过程 包括参数的个数、类型、次序,是否允许递归等。 2 地址码 常量或简单变量 一般是该量在数据区中所占单元的绝对地址或相对地址 数组,是该数组在数据区中的首地址 函数或过程 是该函数或过程的分程序入口地址 放在符号表中 3 层次信息 对于分程序嵌套或过程嵌套结构型程序设计语言,还应该包括每个标识符所属分程序(过程)的层次 4 行号信息 有些程序设计语言需要保存标识符在源程序中的行号,包括说明行和引用行。 一个编译程序,从词法,语法,语义分析到代码生成的整个过程中,符号表是连冠上下文进行语义检查、语义处理、生成代码和存储分配的主要依据,因此符号表的组织直接关系到这些语义功能的实现和语义处理的时空效率。 符号表的总体组织: 说明语句的翻译 说明语句的作用是为可执行语句提供信息,以便于其执行。对声明语句的处理,主要是将所需要的信息正确的填写进合理组织的符号表中。 变量的类型定义与声明 决定变量存储空间的是变量的数据类型。声明一个变量,实质上是声明此变量属于什么类型。编译器根据类型确定变量的存储空间。 说明部分的翻译 对于说明部分的翻译,需要考虑的问题包括: 标识符的类型纪录。 标识符对应的数据对象的地址分配。 标识符的作用域问题。 过程中的说明语句 一个过程中的所有说明语句作为一个类集来处理。用一个全程变量Offset来记录下一个数据在活动记录中的位置。 P →M D M → {offset:=0} //intialization D → D;D D → id :T {enter(id.name,T.type,offset); offset:=offset+T.width } T → integer {T.type :=integer; T.width:=4} T → real {T.type:=real;T.width:=8} T → array[num] of T1

文档评论(0)

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

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

1亿VIP精品文档

相关文档