下载此文档

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


文档分类:高等教育 | 页数:约23页 举报非法文档有奖
1/23
下载提示
  • 1.该资料是网友上传的,本站提供全文预览,预览什么样,下载就什么样。
  • 2.下载该文档所得收入归上传者、原创者。
  • 3.下载的文档,不会出现我们的网址水印。
1/23 下载此文档
文档列表 文档介绍
第9章符号表管理技术
在编译的各个阶段经常要收集、使用出现在源程序中的各种信息,通常把这些信息用一些表格进行记录、存储和管理,如常量表、数组信息表等等,这些表统称为符号表。
符号表的作用∶
保存各类标识符的属性
检查语义的正确性
作为目标代码生成阶段地址分配的依据
符号表的作用是通过插入和检索符号表中记录的标识符属性来实现的。这些属性(如名字、类型、维数等)在声明语句中可直接找到,有些可根据程序中标识符出现的上下文间接地获得。
在编译时,源程序中每出现一次标识符,就要与符号表打一次交道,主要工作是查表和存取操作,因此,与符号表的交互占据了大量的编译时间。所以,如何有效地操作符号表直接影响编译的效率。
符号表的作用∶检查语义的正确性
上下文敏感成分的分析实质上是语法分析的内容。但我们的语法分析是以上下文无关文法为基础的,没有考虑上下文敏感成分的处理,所以必须在语义分析时加以考虑。
属于上下文敏感的语法规定包括:
标识符通常先定义后使用,但在同一个块中,标识符不应重复定义;
实参表中的实参个数与类型必须与相应形参表中的形参个数与类型一致;
表达式中运算对象的类型必须与运算符相容,等等。
第9章符号表管理技术
符号表的作用∶作为目标代码生成阶段地址分配的依据。
对于变量标识符,在目标代码生成时需要确定其存储分配的位置。主要依据符号变量的存储类别及被定义的位置来确定。
第9章符号表管理技术
何时建立和访问符号表
有的编译程序中,符号表在词法分析阶段创建,符号表此时只含有标识符的名字,其它属性要在语义分析阶段填入。
当从源程序中识别出一个标识符时,就以此名字查符号表,若表中尚无此登记项,则将该名字列入表中。
语法分析阶段只检查源程序语法的正确性,一般不使用符号表。
符号表可在词法分析时创建,也可在语义分析时创建。
何时建立和访问符号表
有的编译程序,只在语义分析时才创建符号表。在语义分析阶段,遇到声明语句时会根据标识符的类别、名字属性创建符号表记录。同时对源程序代码需要检查语义的正确性。
在符号表中记录的标识符的属性信息会在代码生成阶段用于产生目标代码的指令序列。
因此,直到语义分析和代码生成阶段,许多与变量有关的属性才能够相继填入符号表。
总之,如果在词法分析阶段创建符号表,只能在符号表中将标识符的名字填入符号表,而其他属性则要在语义分析和代码生成阶段填入。如果在语义分析阶段创建符号表,那么与符号表打交道的就仅局限于语义分析和代码生成部分。
符号表的组织和内容
符号表的管理程序应该具有快速查找、快速删除、易于使用、易于维护的特点。符号表具体包含哪些内容,属性的种类和多少在一定程度上取决于程序设计语言的性质。
符号表基本上都是由一些表项组成的二维表格,每个表项可分为两部分:
第一部分是名字域,用来存放符号的名字;
第二部分是属性域,用来记录与该名字相对应的各种属性和特征。
符号表的组织和内容
几种主要属性通常是需要的。




(目标地址)

符号表管理技术
名字:名字必须常驻在表中,因为它是在语义分析和代码生成中识别一个具体标识符的依据。在符号表的组织中,一个要解决的重要问题是标识符长度的可变问题。对标识符名字的处理要考虑语言中对标识符长度的规定是定长还是不定长。根据标识符的定义特点,通常采用的存储方法有两种:
①定长存贮方法,即为标识符名字域规定一个宽度,标识符按左对齐方式存放在其中,特点是简单且存取速度快,缺点是空间利用率低,标识符长度不能超过名字域的宽度。
②集中存贮方法,即开辟一个存放所有标识符的缓冲区,而在标识符名字域中只存放标识符在缓冲区中的偏移地址和标识符的长度。特点是存贮效率高,标识符无长度限制,但存取效率低。
ComputerX1FORM1
名字位置
名字长度
其它属性
1
8
9
2
17
5


图1 集中存贮方法符号表
目标地址:标识符主要作为变量名字。程序中每个变量都必须有一个相应的目标地址,该地址是为该变量分配的内存地址(可能是相对的)。
当声明一个变量时,就要为该变量分配内存地址,并将其分配的地址填入符号表中。当该变量在程序的其它处被引用时,可以从符号表中查询该地址,并填入存取该变量值的目标代码中。
对于采用静态存储分配的语言(如FORTRAN),分配的地址是按连续的顺序分配的。
对于采用动态存储分配的语言,每个程序块内的变量连续分配,这是一个相对地址,运行时还要根据该程序块分配的数据区的起始地址和变量的相对地址计算出变量的绝对内存地址。
如果标识符表示的是函数名或子程序名,则目

编译原理电子课件教案-第9章-符号表 来自淘豆网www.taodocs.com转载请标明出处.

非法内容举报中心
文档信息
  • 页数23
  • 收藏数0 收藏
  • 顶次数0
  • 上传人3346389411
  • 文件大小199 KB
  • 时间2018-06-23