compiler9_错误处理.ppt

  1. 1、本文档共18页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
* 第九章:错误处理 9.1 概述 9.2 错误分类 9.3 错误的诊察和报告 9.4 错误处理技术 9.1 概述 1. 数据处理是必备功能之一 一般情况下,用户开发源程序都难免出现各种错误 一般有语法和语义错误,还有键入疏忽 正确的源程序:通过编译,生成目标代码。 错误的源程序:通过编译,发现并指出错误。 编译程序对于语法和语义正确的源程序要正确的编译 生成等价的目标代码;而对于错误的源程序不能一发现就 停止而是要能检查出错误的性质和出错位置,并使编译能 继续下去,同时尽可能的多而准确地发现错误和指出各种 错误。 2.错误处理能力 (1)诊察错误的能力。 (2)报错及时准确(出错位置,错误性质)。 (3)一次编译找出错误的多少。 (4)错误的改制能力。 (5)遏制重复的错误信息的能力。 用户希望使用错误处理能力强的编译,尽可能快 地得到一个语法语义正确的源程序。 9.2 错误分类 从编译角度,将错误分为二类: 语法错误和语义错误 语义错误主要包括:程序不符合语义规则或 超越具体计算机系统的限制 超越系统限制:(计算机系统和编译系统) 1. 数据溢出错误,常数太大,计算结果溢出。 2. 符号表、静态存储分配数据区溢出。 3. 动态存储分配数据区溢出。 9.3 错误的诊察和报告 错误诊察: 1.违反语法和语义规则以及超过编译系统限制的错误。 由编译程序在语法和语义分析过程中诊察出来。 (语义分析要借助符号表) 2.下标越界,计算结果溢出以及动态存储数据区溢出。 在目标程序运行时才能检测,由目标程序诊察。 对此,编译程序要生成相应的目标程序作检查和进行处理。 错误报告: 1.出错位置:即源程序中出现错误的位置 实现:设计行号计数器 line-no 设计单词序号计数器 char-no 一旦诊察出错误,当时的计数器内容就是出错位置 2.出错性质: 可直接显示文字信息 可给出错误编码 3.报告错误:(两种方式) (1)分析以后再报告(显示或者打印) 编译程序可设一个保存错误信息的数据区(可 用记录型数组),将语法语义分析所诊断到的错误 送数据区保存,待源程序分析完以后,显示或打印 错误信息。 例:A[x , y :=B+*C 源程序行号 错误序号 错误性质 x x 6 缺少“]” x x 10 表达式语法错误 (2)边分析边报告 可以在分析一行源程序时若发现有错,立即输 出该行源程序,并在其下输出错误信息。 Line-no A[x , y :=B+ *C 缺“]”or n 错误编号 表达式语法错 m 有时候报错不一定十分准确(位置和性质), 需进一步分析 例 begin ........ i:= 1 step 1 until n do ............ end 9.4 错误处理技术 发现错误后,在报告错误的同时还要对错误进行 处理,以方便编译能进行下去。目前有两种处理办法: 1.错误改正:指编译诊察出错误以后,根据文法进 行错误改正。 如:A[i , j :=B+*C 编译可根据A的定义(声明),查符号表知道A是二 维数据,加上“]”,根据表达式定义去掉“*”(但不一 定都对,也有可能去掉“+”) 但不是总能做到,如:A:=B-C*D+E) 是多一个右括号还是少一个左括号? 如果是少了左括号,应该校在何处? 故,要正确的改写错误时很困难的。 2.错误局部化处理:指当编译程序发现错误后,尽可 能将把错误的影响限制在一个局 部的范围,避免错误扩散和影响 程序其他部分的分析。 (1) 一般原则 (2) 错误局部化处理的实现 (3) 提高错误局部化程度的方法 (1) 一般原则 当诊断到错误以后,就暂停对后面符号的 分析,跳过错误所在地语法成分(一旦跳过就认 为该语法成分是正确的)然后继续往下分析。 词法分析:发现

文档评论(0)

2232文档 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档