表格模板-07第7章符号表管理技术 精品.ppt

上传人:lao****ou 文档编号:13264 上传时间:2022-09-21 格式:PPT 页数:40 大小:2.09MB
下载 相关 举报
表格模板-07第7章符号表管理技术 精品.ppt_第1页
第1页 / 共40页
表格模板-07第7章符号表管理技术 精品.ppt_第2页
第2页 / 共40页
表格模板-07第7章符号表管理技术 精品.ppt_第3页
第3页 / 共40页
表格模板-07第7章符号表管理技术 精品.ppt_第4页
第4页 / 共40页
表格模板-07第7章符号表管理技术 精品.ppt_第5页
第5页 / 共40页
亲,该文档总共40页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《表格模板-07第7章符号表管理技术 精品.ppt》由会员分享,可在线阅读,更多相关《表格模板-07第7章符号表管理技术 精品.ppt(40页珍藏版)》请在第一文库网上搜索。

1、第7章 符号表管理技术2022-9-211内容提要符号表的作用符号表的建立与访问符号表的内容与组织符号表上的操作非块程序结构语言的符号表结构块程序结构语言的符号表结构2022-9-212符号表是编译程序中的一个重要数据结构,用来保存各类标识符的属性信息;编译的各个阶段都可能用到与符号相关的各种信息,这些信息用一些表格进行记录、存储和管理,如常量表、数组信息表等等,这些表统称为符号表;编译的分析阶段收集和更新符号表信息,综合阶段从符号表获取信息。7.1 符号表的作用2022-9-213符号表的作用符号表的作用 (1) (1) 登记符号属性值登记符号属性值在源程序的各个分析阶段,编译程序根据标识符

2、的声在源程序的各个分析阶段,编译程序根据标识符的声明信息收集其有关的属性值并存放在符号表中。明信息收集其有关的属性值并存放在符号表中。每种语言规则定义了不同的符号属性;即使是同一个每种语言规则定义了不同的符号属性;即使是同一个语言,不同的编译程序也可能会定义并且收集不同的语言,不同的编译程序也可能会定义并且收集不同的属性信息。属性信息。现代编程语言中一般包括常数声明、变量声明、类型现代编程语言中一般包括常数声明、变量声明、类型声明和过程声明和过程/ /函数声明等四类声明。对于每类声明,函数声明等四类声明。对于每类声明,编译程序要收集、存储和应用的属性完全不同。编译程序要收集、存储和应用的属性完

3、全不同。 2022-9-214例:例:C C语言的变量声明语言的变量声明 short int a; short int a; float b = 0.0; float b = 0.0;编译程序对每个变量要记录其类型,以便执行类型检查编译程序对每个变量要记录其类型,以便执行类型检查和存储分配;和存储分配;比如短整型变量比如短整型变量a a占占2 2个字节,要记录它在存储器中的位个字节,要记录它在存储器中的位置(相对位移或绝对地址);若像置(相对位移或绝对地址);若像b b有初始值,则还需要有初始值,则还需要记录该初始值。记录该初始值。 2022-9-215(2) (2) 查找符号属性查找符号属性

4、 符号表存放源程序中的各种类型的信息,比如数符号表存放源程序中的各种类型的信息,比如数值、变量类型、参数传递的地址等,在分析和翻译值、变量类型、参数传递的地址等,在分析和翻译源程序的过程中会被不断地查询。源程序的过程中会被不断地查询。例:例:对声明语句:对声明语句: short int a = 9; short int a = 9; short int b = 10; short int b = 10;如果源程序有代码如果源程序有代码a + ba + b时,需要查找、计算表达时,需要查找、计算表达式中运算数的式中运算数的类型和值类型和值,以便计算出表达式。,以便计算出表达式。2022-9-21

5、6(3)(3)检查符号的合法性检查符号的合法性 A A、检查类型是否一致、检查类型是否一致例:例:对声明语句:对声明语句: short int a ; short int a ; float b = 0.0; float b = 0.0;有代码有代码 a = b + ba = b + b,C C语言的编译将检查变量语言的编译将检查变量a a和和b b的的类型,把表达式类型,把表达式b + bb + b的结果转换成短整型,仅取的结果转换成短整型,仅取整数部分进行赋值。整数部分进行赋值。强类型语言强类型语言( (如如PascalPascal和和Ada)Ada)的表达式运算数的类的表达式运算数的类型

6、必须一致型必须一致2022-9-217B、检查变量重复定义例:C语言程序中出现int i 35; /定义整型数组ifloat i42; /定义实型数组i,重定义冲突int i 35; /定义整型数组i,重定义冲突 编译程序首先在符号表中记录了标识符i的属性是35个整型元素的数组,而后在分析第二、第三这两个定义说明时,编译程序可通过符号表检查出标识符i的重定义冲突错误。 不论在后二句中i的其它属性与前一句是否完全相同,只要标识符名重定义,就将产生标识符重定义的语义错误。2022-9-218(4) (4) 作为目标代码生成阶段地址分配的依据作为目标代码生成阶段地址分配的依据 由标识符定义的存储类型

7、或它在程序中的位置来确定。由标识符定义的存储类型或它在程序中的位置来确定。首先确定变量存储的区域。例如,在首先确定变量存储的区域。例如,在JavaJava语言中,整数类语言中,整数类型有型有bytebyte(1 1个字节)、个字节)、shortshort(2 2个字节)、个字节)、intint(4 4个字个字节)以及节)以及longlong(8 8个字节),而个字节),而floatfloat类型占类型占4 4个字节,个字节,doubledouble类型占类型占8 8个字节。个字节。其次根据标识符的出现顺序,决定标识符在某个存储区域其次根据标识符的出现顺序,决定标识符在某个存储区域中的具体位置,

8、而有关区域的标志及其相对位置都作为该中的具体位置,而有关区域的标志及其相对位置都作为该标识符的语义信息存放在其符号表中。标识符的语义信息存放在其符号表中。2022-9-219创建时间:词法分析时和语义分析时创建时间:词法分析时和语义分析时1 1、词法分析时创建:、词法分析时创建:当词法分析程序识别出一个标识符时,以该标识符名查找符号当词法分析程序识别出一个标识符时,以该标识符名查找符号表;若表中无此标识符的登记项,将此标识符填入符号表;表;若表中无此标识符的登记项,将此标识符填入符号表;与标识符相关的其它信息,可视工作方便分别语义分析及中间与标识符相关的其它信息,可视工作方便分别语义分析及中间

9、代码生成等阶段陆续填入。代码生成等阶段陆续填入。语义分析程序进行语义正确性分析,遇到声明语句填入有关语义分析程序进行语义正确性分析,遇到声明语句填入有关标识符的属性。标识符的属性。在符号表中记录的标识符属性信息会在代码生成阶段用于产在符号表中记录的标识符属性信息会在代码生成阶段用于产生目标代码的指令序列。生目标代码的指令序列。7.2 符号表的建立与访问2022-9-21102 2、语义分析时创建:、语义分析时创建: 词法分析只输出标识符符号,而标识符名字作为标识符词法分析只输出标识符符号,而标识符名字作为标识符符号的属性输出,在语义分析阶段根据标识符的属性创符号的属性输出,在语义分析阶段根据标

10、识符的属性创建符号表记录,并同时填入其它的属性信息。建符号表记录,并同时填入其它的属性信息。小结:小结: 如果在词法分析阶段创建符号表,只能在符号表中将标如果在词法分析阶段创建符号表,只能在符号表中将标识符的名字填入符号表,而其他属性则要在语义分析和识符的名字填入符号表,而其他属性则要在语义分析和代码生成阶段填入。代码生成阶段填入。 如果在语义分析阶段创建符号表,那么与符号表打交道如果在语义分析阶段创建符号表,那么与符号表打交道就仅局限于语义分析和代码生成。就仅局限于语义分析和代码生成。 2022-9-2111符号表的访问效率是制定符号表管理方案时重点符号表的访问效率是制定符号表管理方案时重点

11、考虑的因素,一个高效的管理方案应该使符号表考虑的因素,一个高效的管理方案应该使符号表具有快速查找、快速删除、易于使用、易于维护具有快速查找、快速删除、易于使用、易于维护等特点。等特点。符号表的内容和组织方式影响其访问效率符号表的内容和组织方式影响其访问效率符号表具体包含哪些内容,属性的种类,一定程符号表具体包含哪些内容,属性的种类,一定程度上取决于程序设计语言的性质。度上取决于程序设计语言的性质。符号表的组织方式要根据内存和存取速度的限制符号表的组织方式要根据内存和存取速度的限制做相应的调整。做相应的调整。 7.3 7.3 符号表的组织和内容符号表的组织和内容 2022-9-2112符号表的内

12、容:符号表的内容:符号表是由一些表项组成的二维表格符号表是由一些表项组成的二维表格每个表项可分为两部分:每个表项可分为两部分:名字域:存放符号名字;名字域:存放符号名字;属性域:记录与该名字相对应的各种属性属性域:记录与该名字相对应的各种属性2022-9-21132022-9-2114 名字名字 目标地址目标地址 类型类型 维数维数 声明行声明行 引用行引用行 指针指针Computer 0 2 1 2 9,4,5 7 X1 4 1 0 3 12,14 0FORM 8 3 2 4 6符号表示例符号表示例 变量名变量名 目标地址目标地址 类型类型 维数或过程的参数数目维数或过程的参数数目 变量声明

13、的源程序行号变量声明的源程序行号 变量引用的源程序行号变量引用的源程序行号 以字母顺序列表的链域以字母顺序列表的链域 名字名字:符号表中设置一个符号名域,存放该标识符,该域通常作符号表中设置一个符号名域,存放该标识符,该域通常作为符号表的关键字。为符号表的关键字。名字在符号表创建时填入,需要解决标识符长度可变问题,根据名字在符号表创建时填入,需要解决标识符长度可变问题,根据标识符定长与否,采用两种存储方法:标识符定长与否,采用两种存储方法:定长存贮方法:定长存贮方法:规定标识符名字域宽度,标识符按左对齐方式规定标识符名字域宽度,标识符按左对齐方式存放。特点:简单、存取速度快;缺点:空间利用率低

14、,标识符存放。特点:简单、存取速度快;缺点:空间利用率低,标识符长度不能超过名字域宽度。长度不能超过名字域宽度。集中存贮方法:集中存贮方法:开辟一个存放所有标识符的缓冲区,而在标识开辟一个存放所有标识符的缓冲区,而在标识符名字域中只存放标识符在缓冲区中的偏移地址。特点:存贮效符名字域中只存放标识符在缓冲区中的偏移地址。特点:存贮效率高,标识符无长度限制;缺点:存取效率低。率高,标识符无长度限制;缺点:存取效率低。根据根据保存标识符长度方法保存标识符长度方法不同有三种方案:不同有三种方案:2022-9-21152022-9-2116(a)标识符长度放在符号表中标识符长度放在符号表中2022-9-

15、2117(b) 标识符长度放在字符串中标识符长度放在字符串中2022-9-2118(c) 用0表示标识符的结束目标地址:目标地址:当声明一个变量时为该变量分配内存地址,并将其当声明一个变量时为该变量分配内存地址,并将其分配的地址填入符号表中。分配的地址填入符号表中。当该变量在程序的其它地方被引用时,可以从符号当该变量在程序的其它地方被引用时,可以从符号表中查询该地址,并填入存取该变量值的目标代码表中查询该地址,并填入存取该变量值的目标代码中。中。内存分配可采用静态分配和动态分配。内存分配可采用静态分配和动态分配。如果标识符是函数名,则地址是该函数开始地址;如果标识符是函数名,则地址是该函数开始

16、地址;如果是数组名,则应为数组模板的起始地址。如果是数组名,则应为数组模板的起始地址。2022-9-2119 类型类型:函数和变量标识符都具有数据类型属性。:函数和变量标识符都具有数据类型属性。函数标识符的数据类型指该函数返回值的数据类型。函数标识符的数据类型指该函数返回值的数据类型。变量标识符的类型属性:变量标识符的类型属性:(1 1)决定该变量的数据占用的存储空间大小)决定该变量的数据占用的存储空间大小(2 2)决定在该变量上可以施加的运算操作(类型检查)。)决定在该变量上可以施加的运算操作(类型检查)。 2022-9-2120维数及参数个数维数及参数个数:数组引用时,其维数应当与数组声明中所定义的数组引用时,其维数应当与数组声明中所定义的维数一致;维数一致;维数用于计算数组元素地址。维数用于计算数组元素地址。函数调用时,实参个数必须与形参个数一致,函数调用时,实参个数必须与形参个数一致,在在符号表组织中把参数个数看成维数。符号表组织中把参数个数看成维数。2022-9-2121交叉引用表交叉引用表:包含前面已经讨论过的许多属性,加上:包含前面已经讨论过的许多属性,加上声明该变量或首

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 技术资料 > 统计图表

copyright@ 2008-2022 001doc.com网站版权所有   

经营许可证编号:宁ICP备2022001085号

本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有,必要时第一文库网拥有上传用户文档的转载和下载权。第一文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知第一文库网,我们立即给予删除!



客服