如果您无法下载资料,请参考说明:
1、部分资料下载需要金币,请确保您的账户上有足够的金币
2、已购买过的文档,再次下载不重复扣费
3、资料包下载后请先用软件解压,在使用对应软件打开
第六章符号表【学习目标】【学习指南】【难重点】§6.1符号表的作用根据编译程序工作阶段的不同划分,名字表中的各种信息将在编译程序工作过程中的适当时候填入。几乎在编译程序工作的全过程中,都需要对符号表进行频繁地访问(查表或填表),其耗费的时间在整个编译过程中占有很大的比例。因此,合理地组织符号表并相应选择好的查、填表方法是提高编译程序工作效率的有效办法。符号表的作用作用一:收集符号属性作用二:上下文语义的合法性检查的依据例如,在一个C语言程序中出现intA[2][3];//定义整型数组AfloatA[4][5];//定义实型数组A,重定义冲突intA[2][3];//定义整型数组A,重定义冲突作用三:目标代码生成阶段地址分配的依据符号的主要属性及作用1、符号名通常在语言程序中标识符字符串是一个变量、函数或过程的唯一标志,因此在符号表中符号名作为表项之间的唯一区别一般不允许重名。从而该符号名与它在符号表中的位置建立起一一对应之关系,使得我们可以用一个符号在表中的位置(通常是一个整数)来替换该符号名。通常把一个标识符在符号表中的位置的整数值称之谓该标识符的内部代码。在经过分析处理的语言程序中标识符不再是一个字符串而是一个整数值,这不但便于识别比较而且缩短了表达的长度。根据语言的定义,程序中出现的重名标识符定义将按照该标识符在程序中的作用域和可视性规则进行相应的处理。而在符号表运行过程中,表中的标识符名始终是唯一的标志。在一些允许操作重载(operatoroverload)的语言中,函数名、过程名是可以重名的,对于这类重载的标识符要通过它们的参数个数和类型以及函数返回值类型来区别,以达到它们在符号表中的唯一性。2、符号的类型随着程序设计语言的发展,语言中变量的类型也得到了扩充,目前大多数语言已定义了在基本数据类型基础上扩充的复合数据类型。复合数据类型有数组类型、记录结构类型等,它们都是由基本数据类型组合而成的。数组或记录结构中的每个基本元素可以是基本数据类型,也可以是其它任何一种组合式数据类型,构成嵌套式数据类型定义。作为存储变量地址的指针类型所指向的变量同样可以是基本数据类型,也可以是其它任何一种组合式数据类型。定义一个变量的基本数据类型或它的组合类型都是符号表中表示标识符属性的重要信息。符号表中设置一个符号类型域,存放该符号的类型。对复合数据类型,通常还需要设置该类型的扩展成分,以存放复合类型的完整的类型属性。3、符号的存储类别符号表中设置一个符号存储类别域,存放该符号的存储类别。区别符号存储类型的属性是编译过程语义处理、检查和存储分配的重要依据。符号的存储类别还决定了符号变量的作用域、可视性和它的生命周期等问题。4、符号的作用域及可视性其它两种情况影响到一个变量的可视性⑵分程序(或复合语句)结构:怎么确立符号的作用域和可视性?5、符号变量的存储分配信息6、符号的其它属性对于编译程序所用的符号表来说,它所涉及的基本操作大致可以归纳为§6.2符号表的组织1.1直接方式1.2间接方式间接组织方式的符号表2.按照标识符的种属intf(inta,intb){intc;if(a>b)c=1;elsec=0;returnc;}根据符号表名字栏的组织特点,符号表信息栏的组织方式也可以分为两类:固定信息内容和仅记录信息存放地址。3.1固定信息内容3.2仅记录信息存放地址对数组标识符需要存储有关数组维数,每维上、下界值,数组类型及数组存放的起始地址等信息。如果将信息与名字一起全部放在符号表中,则因维数不同而使记录该信息的空间大小不易确定,因此,通常给它们另外安排一个内情向量表来记录数组的全部信息,同时在符号表的信息栏设置一指针指向内情向量的入口地址。此外,对像函数名、过程名等含有较多信息且不容易规范信息长度的名字都可以采取这种办法。记录数组内情向量的符号表这样组织的最大优点是每个符号表的属性个数和结构完全相同。则表项是等长的,并且表项中的每个属性栏都是有效的,对于单个符号表示来说,这样使得管理方便一致,空间效率高。但这样组织的主要缺点是一个编译程序将同时管理若干个符号表,增加了总体管理的工作量和复杂度。而且对各类符号共同属性的管理必须设置重复的运行机制。使得符号表的管理显得臃肿。★分程序结构语言的符号表建立源程序的形式{//第一层分程序inta;floatb,d;{//第二层分程序intc;floata;{//第三层分程序intd;floatc;{//第四层分程序floatd;┊a=b+c+d;┊}}}}通常对于具有分程序结构的语言可用两种方式组织它们的符号表:(1)分表结构根据分程序作用域和可视规则。编译程序扫描到某个分程序时在图第四层分程序的表达式a=b+c+d中a是第二层定义的floata,