编译原理电子课件教案-第9-符号表.pptxVIP

  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章 符号表管理技术;符号表的作用∶ 检查语义的正确性 上下文敏感成分的分析实质上是语法分析的内容。但我们的语法分析是以上下文无关文法为基础的,没有考虑上下文敏感成分的处理,所以必须在语义分析时加以考虑。 属于上下文敏感的语法规定包括: 标识符通常先定义后使用,但在同一个块中,标识符不应重复定义; 实参表中的实参个数与类型必须与相应形参表中的形参个数与类型一致; 表达式中运算对象的类型必须与运算符相容,等等。 ;符号表的作用∶ 作为目标代码生成阶段地址分配的依据。 对于变量标识符,在目标代码生成时需要确定其存储分配的位置。主要依据符号变量的存储类别及被定义的位置来确定。;何时建立和访问符号表 ;何时建立和访问符号表 ;符号表的组织和内容 ;符号表的组织和内容 ;符号表管理技术; 目标地址:标识符主要作为变量名字。程序中每个变量都必须有一个相应的目标地址,该地址是为该变量分配的内存地址(可能是相对的)。 当声明一个变量时,就要为该变量分配内存地址,并将其分配的地址填入符号表中。当该变量在程序的其它处被引用时,可以从符号表中查询该地址,并填入存取该变量值的目标代码中。 对于采用静态存储分配的语言(如FORTRAN),分配的地址是按连续的顺序分配的。 对于采用动态存储分配的语言,每个程序块内的变量连续分配,这是一个相对地址,运行时还要根据该程序块分配的数据区的起始地址和变量的相对地址计算出变量的绝对内存地址。 如果标识符表示的是函数名或子程序名,则目标地址是该函数或子程序代码的开始地址。如果是数组名,则应为数组模板的起始地址。 ; 类型:不同数据类型的变量占据不同大小的内存空间,另外类型检查是语义分析的一项重要工作,所以符号表中要保存每个标识符的数据类型,以便分配内存和进行类型检查。 维数及参数个数:这两个属性对类型检查都是重要的。在数组引用时,其维数应当与数组声明中所定义的维数一致,类型检查阶段必须对这种一致性进行检查,另外,维数也用于数组元素地址的计算。 过程调用时,实参个数也必须与形参个数一致。实际上,在符号表组织中,把参数的个数看成它的维数是很方便的,因此可以将两个属性合并成一个,另外这种方法也是协调的,因为对这两种属性所做的类型检查是类似的。 ; 原则上,一个编译程序使用一张符号表就够了,但在源程序中,由于不同种类的符号起着不同的作用,相应于各类符号所需记录的属性往往不同,因此,多数编译程序都是根据符号的不同种类,分别建立不同的符号表,如常数表、变量名表、数组信息表、过程信息表、保留字表、特殊符号表、标准函数名表等等,这样处理起来更方便一些。 从编译系统建造符号表的过程来划分,符号表可分为静态表和动态表两大类: 一是静态表,即在编译前就已经构造好了的符号表,如保留字表、标准函数名表等。 二是动态表,即在编译过程中根据需要构造的符号表,如变量表、数组信息表、过程信息表等等。 ;符号表上的操作 ;非块程序结构语言的符号表结构 ;2、有序表 在编译过程中,由于查找符号表的次数远大于插入符号表的次数,所以如何提高符号表的查找效率直接影响编译的效率。 有序符号表的表项是根据变量名按字母顺序存放的。因此,每次插入符号表前,首先要进行查表工作,以确定要插入的符号在符号表中的位置,然后将符号插入。这样难免会造成原有一些符号的移动,所以,这种符号表结构在插入符号时开销较大。对于有序表,最常用的查找技术是折半查找法。;块程序结构语言的符号表组织 ;下面为一段C程序,右边给出当编译程序编译到此处时的有效变量。 real x,y; char name; name,y,x int fun1(int ind) ind,fun1,name, y,x { int x; x,ind, fun1,name, y,x x=m2(ind+1); } fun1,name, y,x int fun2(int j) j,fun2, fun1,name, y,x { { int f[10]; bool test1;

您可能关注的文档

文档评论(0)

138****7331 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档