第4章 符号表.ppt
《第4章 符号表.ppt》由会员分享,可在线阅读,更多相关《第4章 符号表.ppt(55页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。
1、第第4章章 符号表符号表编译原理课程组 计算机工程学院第第4章章 符号表符号表44.1 符号表的作用和地位符号表的作用和地位44.2 符号的主要属性及作用符号的主要属性及作用44.3 符号表的组织符号表的组织44.4 符号表的管理符号表的管理思考题思考题1.什么是符号表什么是符号表?2.标识符符号通常有那些属性?标识符符号通常有那些属性?3.你认为符号表是怎样进行组织的?你认为符号表是怎样进行组织的?4.你认为符号表是怎样进行管理的?你认为符号表是怎样进行管理的?【学习目标学习目标】4在编译程序中符号表用来存放语言程序中出现在编译程序中符号表用来存放语言程序中出现的有关标识符的属性信息,这些信
2、息集中反映的有关标识符的属性信息,这些信息集中反映了标识符的语义特征属性。本章目的使学生深了标识符的语义特征属性。本章目的使学生深刻全面地了解符号表的地位和作用;掌握符号刻全面地了解符号表的地位和作用;掌握符号表的组织和管理方法;以及编译过程中符号表表的组织和管理方法;以及编译过程中符号表的操作活动过程。的操作活动过程。【难重点难重点】符号表总体组织的选择原则。符号表总体组织的选择原则。变量的类型和存储类别等属性的重要性。变量的类型和存储类别等属性的重要性。采用单表结构时采用单表结构时,如何解决分程序构造中同名如何解决分程序构造中同名名字声明的可视性规则。名字声明的可视性规则。【知识结构知识结
3、构】4.1 符号表的作用和地位符号表的作用和地位 什么是符号表什么是符号表?4在编译过程中,编译程序用于记录源程序中各在编译过程中,编译程序用于记录源程序中各种名字的特性信息,种名字的特性信息,所以也称为名字特性表。所以也称为名字特性表。4名字:名字:程序名、过程名、函数名、用户定义类程序名、过程名、函数名、用户定义类型、变量名、符号名字。型、变量名、符号名字。4特性信息:名字种类、类型、维数、参数个数特性信息:名字种类、类型、维数、参数个数及目标地址(存储单元地址)等。及目标地址(存储单元地址)等。复习复习4词法分析程序的功能是读入源程序,输出单词符号。词法分析程序的功能是读入源程序,输出单
4、词符号。4单词符号是一个程序设计语言的基本语法符号,一般分为下列五种:单词符号是一个程序设计语言的基本语法符号,一般分为下列五种:保留字,关键字:如保留字,关键字:如if,else,while等等标识符:变量名、程序名、函数名等标识符:变量名、程序名、函数名等常数(量)常数(量)运算符运算符界符界符4词法分析程序所输出的单词符号常常采用以下二元式表示:词法分析程序所输出的单词符号常常采用以下二元式表示:(单词类别单词类别,单词自身的值单词自身的值)。4单词的类别是语法分析需要的信息,而单词自身的值则是编译其它阶段单词的类别是语法分析需要的信息,而单词自身的值则是编译其它阶段需要的信息。需要的信
5、息。4对于标识符来说,还需要记载它的类别、层次还有其他属性,如果这些对于标识符来说,还需要记载它的类别、层次还有其他属性,如果这些属性统统收集在符号表中,那么可以将单词的二元式表示设计成如下形属性统统收集在符号表中,那么可以将单词的二元式表示设计成如下形式(标识符,指向该标识符所在符号表位置的指针)式(标识符,指向该标识符所在符号表位置的指针)复习复习4例例:对语句:对语句if i=5 then x:=y的词法分析结果的词法分析结果保留字保留字if (3,if)标识符标识符i (1,指向,指向i的符号表入口)的符号表入口)等等 号号=(4,=)常常 数数5 (2,5)保留字保留字then (3
6、,then)标识符标识符x (1,指向,指向x的符号表入口)的符号表入口)赋值号赋值号:=(4,:=)标识符标识符y (1,指向,指向y的符号表入口)的符号表入口)分分 号;号;(5,;)一、符号表的作用和地位一、符号表的作用和地位4符号表中所登记的信息在编译的不同阶段都要符号表中所登记的信息在编译的不同阶段都要用到。不论编译策略是否分趟,符号表的作用用到。不论编译策略是否分趟,符号表的作用和地位是完全一致的。和地位是完全一致的。收集符号属性收集符号属性 上下文语义的合法性检查的依据上下文语义的合法性检查的依据作为目标代码生成阶段地址分配的依据作为目标代码生成阶段地址分配的依据1、收集符号属性
7、、收集符号属性4编译程序扫描说明部分收集有关标识符的属性,编译程序扫描说明部分收集有关标识符的属性,并在符号表中建立符号的相应属性信息。并在符号表中建立符号的相应属性信息。4例如例如int A;float B5;4A的属性:是一个整型变量;的属性:是一个整型变量;B的属性:一个具的属性:一个具有有5个浮点型元素的一维数组。个浮点型元素的一维数组。2、上下文语义的合法性检查的依据、上下文语义的合法性检查的依据4通过符号表中属性记录可进行相应上下文的语义检查通过符号表中属性记录可进行相应上下文的语义检查。4例如:在例如:在C语言中同一个标识符可作引用说明也可作定义说明语言中同一个标识符可作引用说明
8、也可作定义说明 int i 35;/定义说明定义说明i extern float i;/引用说明引用说明i 4又例如:在又例如:在C语言中同一个标识符可作引用说明也可作定义说明语言中同一个标识符可作引用说明也可作定义说明 int i 35;float i42;int i 35;语义检查可发现语义检查可发现其不一致错误其不一致错误。重定义冲突的语义错误。重定义冲突的语义错误。3、作为目标代码生成阶段地址分配的依据、作为目标代码生成阶段地址分配的依据4每个符号变量在目标代码生成时需要确定其在每个符号变量在目标代码生成时需要确定其在存储分配的位置(主要是相对位置)。存储分配的位置(主要是相对位置)。
9、n首先,要确定其被分配的区域。首先,要确定其被分配的区域。例如,在例如,在C语言中首先要确定该符号变量是分配在公共区语言中首先要确定该符号变量是分配在公共区(extern)、文件静态区(、文件静态区(extern static)、函数静态区(函、函数静态区(函数中数中static)、还是函数运行时的动态区(、还是函数运行时的动态区(auto)等。等。n其次,是根据变量出现的次序。其次,是根据变量出现的次序。一般说来,决定变量在某个区中所处的具体位置,这通一般说来,决定变量在某个区中所处的具体位置,这通常使用在该区域中相对区头的相对位置来确定。常使用在该区域中相对区头的相对位置来确定。而有关而有
10、关区域的标志及相对位置都是作为该变量的语义信息被收区域的标志及相对位置都是作为该变量的语义信息被收集在该变量的符号表属性中。集在该变量的符号表属性中。二、符号表的操作二、符号表的操作4往表中填入一个新的名字;往表中填入一个新的名字;4对给定名字,查询名字是否已在表中;对给定名字,查询名字是否已在表中;4对给定名字,访问它的某些信息;对给定名字,访问它的某些信息;4对给定名字,填写或更新它的某些信息;对给定名字,填写或更新它的某些信息;4删除一个或一组无用的项。删除一个或一组无用的项。符号表的操作主要为查表和填表。符号表的操作主要为查表和填表。4.2 符号的主要属性及作用符号的主要属性及作用4不
11、同的语言定义的标识符属性不尽相同,我们主要讨论符号不同的语言定义的标识符属性不尽相同,我们主要讨论符号表中的标识符一般设置的属性项目以及它们的功能。表中的标识符一般设置的属性项目以及它们的功能。1、符号名:符号表中符号名作为表项之间的唯一区别一般不允许重名。、符号名:符号表中符号名作为表项之间的唯一区别一般不允许重名。允许操作重载的语言中,函数名、过程名是可以重名的,对于这类允许操作重载的语言中,函数名、过程名是可以重名的,对于这类重载的标识符要通过它们的参数个数和类型以及函数返回值类型来重载的标识符要通过它们的参数个数和类型以及函数返回值类型来区别,以达到它们在符号表中的惟一性。区别,以达到
12、它们在符号表中的惟一性。2、符号的类型:符号表中设置一个符号类型域,存放该符号的类型。、符号的类型:符号表中设置一个符号类型域,存放该符号的类型。3、存储类别:存储类别定义采用二种方式,一种是用关键字指定(、存储类别:存储类别定义采用二种方式,一种是用关键字指定(例例如如C语言中用语言中用Static定义是属于文件的静态存储变量或属于函数内部定义是属于文件的静态存储变量或属于函数内部的静态存储变量,用的静态存储变量,用regist定义使用寄存器存储的变量定义使用寄存器存储的变量);另一种方);另一种方式是根据定义变量说明在程序中的位置来决定式是根据定义变量说明在程序中的位置来决定。(例如(例如
13、C语言中,在语言中,在函数体外默认存储类关键字所定义的变量是外部变量,而在函数体函数体外默认存储类关键字所定义的变量是外部变量,而在函数体内默认存储类关键字所定义的变量是内部变量)内默认存储类关键字所定义的变量是内部变量)4.2 符号的主要属性及作用符号的主要属性及作用 4、作用域及可视性、作用域及可视性4一个符号变量在程序中起作用的范围,称谓其作用域。一个符号变量在程序中起作用的范围,称谓其作用域。4一般来说,定义该符号的位置及存储类关键字决定了一般来说,定义该符号的位置及存储类关键字决定了该符号的作用域。该符号的作用域。4一般来说变量的作用域就是该变量可以出现的场合,一般来说变量的作用域就
14、是该变量可以出现的场合,也就是说在某个变量作用域范围内该变量是可引用的,也就是说在某个变量作用域范围内该变量是可引用的,这就是变量可视性的作用域规则。这就是变量可视性的作用域规则。4变量可视性不仅仅取决于它的作用域,还有两种情况变量可视性不仅仅取决于它的作用域,还有两种情况影响到一个变量的可视性。影响到一个变量的可视性。函数的形式参数函数的形式参数 分程序(或复合语句)结构分程序(或复合语句)结构1)函数的形式参数:影响变量可视性的举例)函数的形式参数:影响变量可视性的举例int a;int func(a,b)float a;int b;a/引用引用float a 4.2 符号的主要属性及作用
15、符号的主要属性及作用其中其中intint a a与与float afloat a重名,而函数体中可看到重名,而函数体中可看到的的a a是是float afloat a,intint a a在函数中是看不到的。在函数中是看不到的。1)函数的形式参数:影响变量可视性的举例()函数的形式参数:影响变量可视性的举例(1)4 int a;int func(a,b)float a;int b;a/引用引用float a a/引用引用int a4.2 符号的主要属性及作用符号的主要属性及作用2)分程序(或复合语句)结构;影响变量可视性的举例)分程序(或复合语句)结构;影响变量可视性的举例4 int a;4
16、char a;float a;a 4.2 符号的主要属性及作用符号的主要属性及作用图中第图中第3 3层所引用的层所引用的a a,既,既不是第不是第4 4层的层的float afloat a;也;也不是第不是第1 1层层intint a a;而是第;而是第2 2层层char achar a5、存储分配信息、存储分配信息4根据符号变量的存储类别定义及它们出现的位置和次根据符号变量的存储类别定义及它们出现的位置和次序来确定每一个变量应分配的存储区及在该区中的具序来确定每一个变量应分配的存储区及在该区中的具体位置,用相对区头的位移量表示。体位置,用相对区头的位移量表示。4通常一个编译程序有两类存储区:
17、通常一个编译程序有两类存储区:静态存储区静态存储区动态存储区动态存储区4.2 符号的主要属性及作用符号的主要属性及作用6、其它属性、其它属性4数组内情向量数组内情向量(数组类型,维数,各维的上、下界,数组首地址)数组类型,维数,各维的上、下界,数组首地址)4记录结构型的成员信息记录结构型的成员信息 4函数及过程的形参函数及过程的形参 4.2 符号的主要属性及作用符号的主要属性及作用4.3 符号表的组织符号表的组织4符号表的组织直接关系到语义功能的实现和语符号表的组织直接关系到语义功能的实现和语义处理的时空效率。义处理的时空效率。4关于符号表的组织可从符号表的总体组织和表关于符号表的组织可从符号
18、表的总体组织和表项属性信息组织来分别讨论。项属性信息组织来分别讨论。一、符号表的总体组织一、符号表的总体组织4符号表的基本结构如下:符号表的基本结构如下:符号符号属性属性一、符号表的总体组织(一、符号表的总体组织(1)1、第一种方法、第一种方法4把属性种类完全相同的那些符号组织在一起,构造出把属性种类完全相同的那些符号组织在一起,构造出表项是分别为等长的多个符号表。表项是分别为等长的多个符号表。2、第二种方法、第二种方法4把所有语言中的符号都组织在一张符号表中。把所有语言中的符号都组织在一张符号表中。4假设有下列三类符号及其所需之属性。假设有下列三类符号及其所需之属性。符号符号属性值属性值1属
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第4章 符号表 符号
限制150内