- 1、本文档共54页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第10章 符号表和错误处理 本章学习目标 为了检查语义的正确性和生成代码,需要知道源程序中所使用的各种标识符的属性。这些属性常常由编译程序集中起来并存放在一个标识符表或符号表中。本章的主要内容有: 符号表的组织和内容 符号表的构造和查找 分程序的结构 10.1符号表的组织和内容 在编译的各个阶段经常要收集和使用出现在源程序中的各种信息,为了方便,通常把这些信息用一些表格进行记录、存储和管理,如常量表、数组信息表、保留字表和标识符表等,这些表统称为符号表。符号表主要保存各类标识符的属性,它在翻译过程中有两个方面的重要作用,一是检查语义的正确性,二是辅助生成代码。也就是说在实现语义检查和代码生成时,需要不断插入和检索符号表中标识符的属性来实现。 在进行词法分析时,从字符串源程序中分离出标识符后,首先检查保留字表,如果在保留字表中没有,就是标识符,词法分析程序就输出标识符符号,同时记住该标识符符号和属性值。 在编译时,源程序中每出现一次标识符,就要和符号表打一次交道,主要工作是查表和存取操作,因此与符号表交互占据了大量的编译时间。所以如何有效地组织和快速查找符号表直接影响编译的效率。 符号表可以在词法分析时创建,也可以在语义分析时创建。在编译程序中,符号表在词法分析时创建,此时符号表中只含有标识符的名字,其他属性要在语义分析阶段填入。而变量在符号表中的位置信息将作为标识符符号的属性出现,构成词法分析器所产生的单词符号的一部分;语法分析阶段只检查源程序语法的正确性,一般不使用符号表;语义分析程序对该编码形式进行语义正确性分析,遇到声明语句时会填入有关标识符的属性。在 符号表中的标识符的属性信息会在代码生成阶段用于产生目标代码。因此,直到语义分析和代码生成阶段,许多与变量有关的属性才能相继填入符号表。 10.1.2符号表的组织 在编译程序中,符号表主要用来存放源程序中各种有用的信息。在编译阶段要不断对这些信息进行访问、增加和更新。因此,需要合理组织符号表使符号表占用尽量少的内存空间,同时还要提高访问符号表的效率。符号表中具体需要设计哪些属性也部分的取决于程序设计语言的特点。 1.表的属性 (1)标识符的名字。一个标识符可以是一个变量的名字、一个函数的名字或一个过程的名字。 (2)符号的类型。除过程标识符之外的函数和变量都具有数据类型。 (3)符号的存储类别。大多数语言的存储类别有两种方式,一种是公共存储区的变量,另一种是私有存储变量。 (4)符号的作用域及可视性。一个符号变量在程序中起作用的范围,称为作用域。一般来讲,定义该符号的位置及存储类关键字决定了该符号的作用域。但是在出现函数的形式参数和分程序的时候,就要考虑可视性的问题。关于变量的作用域和可视性可以结合C语言进行考虑。 int a; int func(a,b) float a; int b; { … a /*此时的 a为形式参数的a*/ … } 分程序的情况: … { int a; … {char a; … {float a; … } …a…//引用的是char a;// } } (5)符号变量的存储分配信息。通常一个编译程序有两类存储区,即静态存储区和动态存储区。 (6)符号表的其他属性 符号表还有其它方面的重要信息。 1)数组的内情向量在程序设计语言中,数组是一种重要的数据类型。编译程序处理数组主要是把数组的内情向量表登录在符号表中,这些属性信息确定了存储分配时数组占据多大的内存空间。 2)记录结构型的成员信息。一个结构体类型的变量,是由若干成员项组成的,因此记录类型的变量在存储空间的大小是由它的成员项来决定。 3)函数及过程的形参。函数和过程的形参作为函数或过程的局部变量,又是对外的接口。因此,形式参数的个数、排列次序和类型都必须反映在符号表中。它还是过程调用和语义检查的依据。 (1)名字。就是指标识符的名字属性。 (2)目标地址。标识符主要做变量的名字,程序中每个变量都必须有一个相应的目标地址,该地址是为该变量分配的相对内存地址。当声明一个变量时,就要为该变量分配内存空间,并将其分配的地址填入符号表中。当该变量在程序的其他处被引用时,可以从符号表中查询该变量,并填入存取该变量值的目标代码中。对于采用静态存储分配的语言如FORTRAN,地址是连续分配的。对于采用动态存储分配的语言,每个程序块的变量是连续分配的,这是一个相对地址。运行时还要根据该程序块分配的数据区的起始地址和变量的相对地址计算出该变量的绝对内存地址。如果标识符表示的是函数名,则目标地址就是该函数代码的起始地址,是数组名则为数组模板的起始地址。 (3)类型。不同数据类型的变量占据不同大小的内存空间,另外类型检查是语义分析的一项重要工作,所以符号表中要保存每个标识符的数据类
您可能关注的文档
- 编单片机原理与应用 三版 教学课件 作者 潘永雄 第1 3章 第1章.ppt
- 编单片机原理与应用 三版 教学课件 作者 潘永雄 第1 3章 第2章.ppt
- 编单片机原理与应用 三版 教学课件 作者 潘永雄 第1 3章 第3章.ppt
- 编单片机原理与应用 三版 教学课件 作者 潘永雄 第1 3章 封面及目录.ppt
- 编单片机原理与应用 三版 教学课件 作者 潘永雄 第4 7章 第7章.ppt
- 编码理论 第二版 教学课件 作者 田丽华 第1 5章 第1章.ppt
- 编码理论 第二版 教学课件 作者 田丽华 第1 5章 第2章.ppt
- 编码理论 第二版 教学课件 作者 田丽华 第1 5章 第3章.ppt
- 编码理论 第二版 教学课件 作者 田丽华 第1 5章 第4章.ppt
- 编码理论 第二版 教学课件 作者 田丽华 第1 5章 第5章.ppt
- 编译原理实用教程杨德芳电子教案 第11章 目标代码的生成.ppt
- 变频技术原理与应用 第2版 教学课件 作者 吕汀 第1 2章.ppt
- 变频器及其控制技术 教学课件 作者 肖朋生 电子教案 第1章通用变频器的基本工作原理.ppt
- 变频器及其控制技术 教学课件 作者 肖朋生 电子教案 第2章通用变频器的参数设置及功能选择.ppt
- 变频器及其控制技术 教学课件 作者 肖朋生 电子教案 第3章变频器调速控制电路的设计.ppt
- 变频器及其控制技术 教学课件 作者 肖朋生 电子教案 第4章变频器安装及外围设施的选用.ppt
- 变频器及其控制技术 教学课件 作者 肖朋生 电子教案 第5章变频器的应用举例.ppt
- 变频器及其控制技术 教学课件 作者 肖朋生 电子教案 第6章成套变频调速电气控制柜的设计.ppt
- 变频器及其控制技术 教学课件 作者 肖朋生 习题、操作练习题解答 变频器及其控制技术习题操作练习题解答.doc
- 变频器技术应用与实践 教学课件 作者 三菱、西门子 高职 教学课件 作者 袁勇 全书第1章.ppt
文档评论(0)