编译技术 张莉第一部分-基础篇 电子教案-第8章-错误处理.ppt

编译技术 张莉第一部分-基础篇 电子教案-第8章-错误处理.ppt

ID:51619210

大小:139.50 KB

页数:16页

时间:2020-03-26

编译技术 张莉第一部分-基础篇 电子教案-第8章-错误处理.ppt_第1页
编译技术 张莉第一部分-基础篇 电子教案-第8章-错误处理.ppt_第2页
编译技术 张莉第一部分-基础篇 电子教案-第8章-错误处理.ppt_第3页
编译技术 张莉第一部分-基础篇 电子教案-第8章-错误处理.ppt_第4页
编译技术 张莉第一部分-基础篇 电子教案-第8章-错误处理.ppt_第5页
资源描述:

《编译技术 张莉第一部分-基础篇 电子教案-第8章-错误处理.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、第八章错误处理概述错误分类错误的诊察和报告错误处理技术8.1概述1.必备功能之一正确的源程序:通过编译生成目标代码错误的源程序:通过编译发现并指出错误2.错误处理能力(1)诊察错误的能力(2)报错及时准确(3)一次编译找出错误的多少(4)错误的改正能力(5)遏止重复的错误信息的能力8.2错误分类从编译角度,将错误分为两类:语法错误和语义错误语法错误:源程序在语法上不合乎文法如:A[I,J:=B+*C语义错误主要包括:程序不符合语义规则或超越具体计算机系统的限制超越系统限制:数据溢出错误符号表、静态存储分配数据区溢出动态存储分配数据区溢出语义规则:标识符引用要

2、符合作用域规定标识符先说明后引用参与运算的操作数类型一致过程调用时实参与形参要一致下标变量下标不能越界8.3错误的诊察和报告错误诊察:1.违反语法和语义规则以及超过编译系统限制的错误。编译程序:语法和语义分析时(语义分析要借助符号表)2.下标越界,计算结果溢出以及动态存储数据区溢出。目标程序:目标程序运行时对此,编译程序要生成相应的目标程序作检查和进行处理错误报告:1.出错位置:即源程序中出现错误的位置实现:行号计数器line_no单词序号计数器char_no2.出错性质:可直接显示文字信息可给出错误编码一旦诊察出错误,当时的计数器内容就是出错位置3.报告错

3、误的两种方式:(1)分析完以后再报告(显示或者打印)编译程序可设一个保存错误信息的数据区(可用记录型数组),将语法语义分析所诊察到的错误送数据区保存,待源程序分析完以后,显示或打印错误信息。例:A[x,y:=B+*C源程序行号错误序号错误性质xx6缺少“]”xx10表达式语法错误(2)边分析边报告可以在分析一行源程序时若发现有错,立即输出该行源程序,并在其下输出错误信息。有时候报错不一定十分准确(位置和性质),需进一步分析Line-noA[x,y:=B+*C缺“]”orn错误编号表达式语法错m例begin........i:=1step1untilndo..

4、..........end8.4错误处理技术1.错误改正:指编译诊察出错误以后,根据文法进行错误改正。如:A[i,j:=B+*C但不是总能做到,如A:=B-C*D+E)要正确地改正错误是很困难的发现错误后,在报告错误的同时还要对错误进行处理,以方便编译能进行下去。目前有两种处理办法:2.错误局部化处理:指当编译程序发现错误后,尽可能把错误的影响限制在一个局部的范围,避免错误扩散和影响程序其他部分的分析。(1)一般原则当诊察到错误以后,就暂停对后面符号的分析,跳过错误所在的语法成分然后继续往下分析。词法分析:发现不合法字符,显示错误,并跳过该标识符(单词)继续

5、往下分析。语法语义分析:跳过所在的语法成分(短语或语句),一般是跳到语句右界符,然后从新语句继续往下分析。(2)错误局部化处理的实现(递归下降分析法)cx:全局变量,存放错误信息。出错程序先打印或显示出错位置以及出错信息,然后跳出一段源程序,直到跳到语句的右界符(如:end)或正在分析的语法成分的合法后继符号为止,然后再往下分析。用递归下降分析时,如果发现错误,便将有关错误信息(字符串或者编号)送CX,然后转出错误处理程序;例:条件语句分析:ifthen[else];有如下分析程序:procedureif_stmt;beginn

6、extsym;/*读下个单词符号*/B;/*调用布尔表达式处理程序*/ifnotclass=‘then’thenbegincx:=‘缺then’/*错误性质送cx*/error;/*调用出错处理程序*/end;elsebeginnextsym;statementend;ifclass=‘else’thenbeginnextsym;statement;endendif_stmt;局部化处理的出错程序为:procedureerror;beginwrite(源程序行号,序号,cx)repeatnextsym;untilclass=‘;’orclass=‘end’o

7、rclass=‘else’enderror;跳过太多realx,3a,a,bcd,2fg;(3)提高错误局部化程度的方法设S1:合法后继符号集(某语法成分的后继符号)S2:停止符号集(跳读必须停止的符号集)进入某语法成分的分析程序时:S1:=合法后继符号S2:=停止符号当发现错误时:error(S1,S2)procedureerror(S1,S2)beginwrite(line_no,char_no,cx);repeatnextsymuntil(classinS1orclassinS2);endifthen[else]若

8、错,则可跳到then,若有错,则可跳到e

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。