编译技术课件-错误处理.pptxVIP

  1. 1、本文档共16页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
第八章 错误处理 概述 错误分类 错误的诊察和报告 错误处理技术8.1 概述1. 必备功能之一正确的源程序:通过编译生成目标代码错误的源程序:通过编译发现并指出错误2. 错误处理能力(1) 诊察错误的能力(2) 报错及时准确(3) 一次编译找出错误的多少(4) 错误的改正能力(5) 遏止重复的错误信息的能力8.2 错误分类从编译角度,将错误分为两类:语法错误和语义错误语法错误:源程序在语法上不合乎文法 如: A[ I, J := B +* C语义错误主要包括:程序不符合语义规则或 超越具体计算机系统的限制语义规则: 标识符先说明后引用 标识符引用要符合作用域规定 过程调用时实参与形参要一致 参与运算的操作数类型一致 下标变量下标不能越界超越系统限制: 数据溢出错误 符号表、静态存储分配数据区溢出 动态存储分配数据区溢出8.3 错误的诊察和报告错误诊察: 1. 违反语法和语义规则以及超过编译系统限制的错误。 编译程序: 语法和语义分析时 (语义分析要借助符号表) 2. 下标越界,计算结果溢出以及动态存储数据区溢出。 目标程序: 目标程序运行时 对此,编译程序要生成相应的目标程序作检查 和进行处理 错误报告:1. 出错位置:即源程序中出现错误的位置实现:行号计数器line_no 单词序号计数器char_no一旦诊察出错误,当时的计数器内容就是出错位置2.出错性质:可直接显示文字信息可给出错误编码3. 报告错误的两种方式:(1)分析完以后再报告(显示或者打印) 编译程序可设一个保存错误信息的数据区(可用记录型数组),将语法语义分析所诊察到的错误送数据区保存,待源程序分析完以后,显示或打印错误信息。例:A[x , y :=B+*C源程序行号 错误序号 错误性质 x x 6缺少“]” x x 10表达式语法错误缺“]”or 表达式语法错 nm错误编号(2) 边分析边报告 可以在分析一行源程序时若发现有错,立即输出该行源程序,并在其下输出错误信息。Line-no A[x , y := B+ *C 有时候报错不一定十分准确(位置和性质),需进一步分析例begin ........ i := 1 step 1 until n do ............end8.4 错误处理技术 发现错误后,在报告错误的同时还要对错误进行处理,以方便编译能进行下去。目前有两种处理办法:1. 错误改正:指编译诊察出错误以后,根据文法进 行错误改正。如:A[i , j :=B+*C要正确地改正错误是很困难的但不是总能做到,如A:=B-C*D+E)2. 错误局部化处理:指当编译程序发现错误后,尽可 能把错误的影响限制在一个局部 的范围,避免错误扩散和影响 程序其他部分的分析。(1) 一般原则 当诊察到错误以后,就暂停对后面符号的分析, 跳过错误所在的语法成分然后继续往下分析。词法分析:发现不合法字符,显示错误,并跳 过该标识符(单词)继续往下分析。语法语义分析:跳过所在的语法成分(短语或语 句),一般是跳到语句右界符, 然后从新语句继续往下分析。(2) 错误局部化处理的实现(递归下降分析法)cx: 全局变量,存放错误信息。用递归下降分析时,如果发现错误,便将有关错误信息(字符串或者编号)送CX,然后转出错误处理程序;出错程序先打印或显示出错位置以及出错信息,然后跳出一段源程序, 直到跳到语句的右界符(如:end)或正在分析的语法成分的合法后继符号为止, 然后再往下分析。if<B> then <stmt>[else< stmt >];例:条件语句分析:有如下分析程序:procedure if_stmt; begin nextsym; /*读下个单词符号*/ B; /*调用布尔表达式处理程序*/ if not class=‘then’ then begin cx :=‘缺then’ /*错误性质送cx*/ error; /*调用出错处理程序*/ end; else begin nextsym; statement end; if class=‘else’then begin nextsym; statement; end end if_stmt;局部化处理的出错程序为:procedur

文档评论(0)

极研教育 + 关注
官方认证
服务提供商

提供24考研全程班(数政英,专业课等)详情加v:JiYan-edu 公众号:极研教育

认证主体天津西青区极研智慧智能科技有限公司
IP属地天津
统一社会信用代码/组织机构代码
91120111MA07276K52

1亿VIP精品文档

相关文档

相关课程推荐