- 1、本文档共18页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
* S.P O.P 语义分析与中间代码 生成目标程序 代码优化 语法分析程序 词法分析程序 错 误 处 理 符 号 表 管 理 符号表与错误处理 * 6.1 符号表管理 符号表的作用: (1) 收集符号的各种信息 (2) 语义检查的依据 (3) 目标代码生成阶段地址分配的依据 * 6.1 符号表管理 名字栏 (NAME) 信息栏 (INFORMATION) 第1项(入口1) 第2项(入口2) … … 第n项(入口n) ?信息栏包含许多子栏和标志位,用来记录相应名字和不同属性, 由于查填符号表一般是通过匹配名字来实现的,因此,名字栏 也称主栏。主栏的内容称为关键字(key word)。 符号表的内容:名字栏+信息栏 * 符号表的组织 6.1 符号表管理 符号表的总体组织: (1)多张 (2)一张 (3)前两种的折中 符号表项的组织: (1)线性组织 (2)排序组织 (3)散列组织:效率高,为多数编译程序采用 * 6.1 符号表管理 (1)向表中填入一个新标识符; (2)对于给定一个标识符: ① 查找是否在表中; ② 访问它在表中的相关信息; ③ 在表中填写或更新它的某些信息。 (3)更新或删除一个或一组无用的项。 符号表的操作 * 建立和访问符号表的时机 6.1 符号表管理 1、多遍编译器 符号表由词法分析器创建,词法分析器所产 生的记号的属性就是变量在符号表中的位置。 * 建立和访问符号表的时机 6.1 符号表管理 2、单遍编译器 * 多遍的优点: 对语法分析器来讲降低了文法的复杂性 允许用更系统的方法对上下文有关的错误进行检测和校正。 建立和访问符号表的时机 6.1 符号表管理 * 词法错误:在词法分析阶段就可以发现的错误; 语法错误:程序的书写不符合语法规则; 语义错误: 静态语义错误:编译程序可以发现; 动态语义错误:源程序虽然能够被编译和执行,但是 结果不对。一般是逻辑上的错误。 违反环境限制的错误: 由于实现方面的问题,有些编译器不接受语言的全集。同时语言本身也有限制。 错误种类 6.5 错误处理 标识符的长度限制 函数说明嵌套的深度, 数组的最大层数 * 词法错误:不合法单词 例:mian( ) { int 3sum; … } 语法错误:源程序在语法上不符合文法 例:A[x, y=B+*C 6.5 错误处理 * 语义规则 标识符先说明后引用 标识符引用要符合作用域规定 过程调用时实参与形参类型一致 参与运算的操作数类型一致 下标变量的下标不能越界 语义错误主要包括:程序不符合语义规则或 超越具体计算机系统的限制 6.5 错误处理 * 超越系统限制:(计算机系统和编译系统) 1. 数据溢出错误,常数太大,计算结果溢出。 2. 符号表、静态存储分配数据区溢出。 3. 动态存储分配数据区溢出。 6.5 错误处理 * 6.5 错误处理 错误复原 当编译程序碰到源程序中错误的时候,应该设法从错误中复原,并继续扫描程序以给出更多的提示信息。更多的信息使得程序员能够更加方便地修改程序。 可能复原是错误的。所以一般来讲,编译程序给出的第一个错误是可靠的,而其他的错误信息可能是不准确的。 * 常用的方法是:对于某个语法成分,如果该语法成分有一个非常确定的符号作为结束符号。那么当扫描这个语法成分时发现错误,程序试图继续扫描到该结束符号。并把这个符号之前的东西规约成为相应的语法成分。 6.5 错误处理 错误复原 * 6.5 错误处理 错误定位 在扫描程序检查到错误的时候,需要告诉用户,其错误发生在源程序的什么位置。 简单的方法是:在进行词法分析的时候,记录下每个词法单位(符号)的行和列。扫描程序碰到非预期的符号时,可以在提示信息中给出该符号的位置。 * 错误处理方法有两种: 错误校正法: 根据文法进行错误改正 错误局部化法: 把错误的影响限制在一个局部的范围, 避免错误扩散和影响程序其他部分的分析 6.5 错误处理 * 错误局部化法 词法分析:发现不合法字符,显示错误,并跳 过该标识符(单词)继续往下分析。 语法语义分析:跳过所在的语法成分(短语或语 句),一般是跳到语句右界符, 然后从新语句继续往下分析。 6.5 错误处理 * 6.5 错误处理 错误局部化处理遵循以下两条原则: (1)镇定原则 (2)关键字原则
文档评论(0)