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

第4章 符号表 编译原理课程组 计算机科学系网络教研室 【学习目标】 符号表作为编译系统的重要设施,贯穿于文法分析、检查和语义处理的编译全过程。本章目的使学生深刻全面地了解符号表的地位和作用;掌握符号表的组织和管理方法;以及编译过程中符号表的操作活动过程。 【难重点】 ◇ 符号表总体组织的选择原则。 ◇ 变量的类型和存储类别等属性的重要性。 ◇ 采用单表结构时,如何解决分程序构造中同名名字声明的可视性规则。采用分表结构适合哪种语言的编译系统。 【知识结构】 4.1 符号表的作用和地位 什么是符号表? 在编译过程中,编译程序用于记录源程序中各种名字的特性信息, 所以也称为名字特性表。 名字: 程序名、过程名、函数名、用户定义类型、变量名、符号名字。 特性信息:名字种类、类型、维数、参数个数及目标地址(存储单元地址)等。 一、符号表的作用和地位 符号表中所登记的信息在编译的不同阶段都要用到。不论编译策略是否分趟,符号表的作用和地位是完全一致的。 收集符号属性 上下文语义的合法性检查的依据 作为目标代码生成阶段地址分配的依据 1、收集符号属性 编译程序扫描说明部分收集有关标识符的属性,并在符号表中建立符号的相应属性信息。 例如 int A; float B[5]; A的属性:是一个整型变量;B的属性:一个具有5个浮点型元素的一维数组。 2、上下文语义的合法性检查的依据 通过符号表中属性记录可进行相应上下文的语义检查,确定标识符的一致性和合法性。 例如,在一个C语言程序中同一标识符中不同地方出现,属性可以不同。  int i [3][5];   ……   float i[4][2];   ……   extern float i;   …… 3、作为目标代码生成阶段地址分配的依据 每个符号变量在目标代码生成时需要确定其在存储分配的位置(主要是相对位置)。 C语言中符号变量 静态区、函数静态区、动态区 不同类型的变量 二、符号表的操作 往表中填入一个新的名字; 对给定名字,查询名字是否已在表中; 对给定名字,访问它的某些信息; 对给定名字,填写或更新它的某些信息; 删除一个或一组无用的项。 4.2 符号的主要属性及作用 不同的语言定义的标识符属性不尽相同,我们在这一节中主要讨论符号表中的标识符一般设置的属性项目以及它们的功能。 1、符号名:符号表中符号名作为表项之间的唯一区别一般不允许重名。程序中的同名标识符按其作用域和可视性进行处理。 2、类型:符号表中设置一个符号类型域,存放该符号的类型。 3、存储类别:一种是用关键字指定;另一种方式是根据定义变量说明在程序中的位置来决定。 4、作用域及可视性 作用域:一个符号变量在程序中起作用的范围。 定义该符号的位置及存储类关键字决定了该符号的作用域。 一个变量的作用域就是该变量可以出现的场合,也就是说在某个变量作用域范围内该变量是可引用的,这就是变量可视性的作用域规则。 变量可视性不仅仅取决于它的作用域,还有两种情况影响到一个变量的可视性。 函数的形式参数:函数参数作为函数的内部变量处理 分程序(或复合语句)结构  1)函数的形式参数:影响变量可视性的举例 int a; int func(a,b) float a;  int b; { … …a…  … } 2)分程序或复合语句结构,影响变量可视性的举例   …   {int a;    …     {char a;     …       {       …         {float a;         …         }        …a…        }      }    } 5、存储分配信息 根据符号变量的存储类别定义及它们出现的位置和次序来确定每一个变量应分配的存储区及在该区中的具体位置。 通常一个编译程序有两类存储区: 静态存储区:公共变量,外部变量,局部静态变量 动态存储区:局部变量,函数参数,复合语句内部变量 6、其它属性 数组内情向量 数组类型,维数,各维上下界,数组首地址 记录结构型的成员信息 各个成员的类型和排列次序 函数及过程的形参 形参的个数,类型,排列次序 4.3 符号表的组织 符号表的组织直接关系到语义功能的实现和语义处理的时空效率。 关于符号表的组织可从符号表的总体组织和表项属性信息组织来分别讨论。 一、符号表的总体组织 一、符号表的总体组织(1) 第一种组织方法得到三张符号表,如下图所示: 一、符号表的总体组织(2) 2、第二种方法 把所有语言中的符号都组织在一张符号表中。 假设有下列三类符号及其所需之属性。 第二种组织方法得到一张符号表,如下图所示: 3、第三种方

文档评论(0)

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

教师资格证持证人

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

领域认证该用户于2024年04月12日上传了教师资格证

1亿VIP精品文档

相关文档