Javac (J2SE) 编译器错误处理介绍.pdf

  1. 1、本文档共9页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Javac (J2SE) 编译器错误处理介绍

7 错误处理错误处理 错误处理错误处理 7 错误处理 1 7.1 概述 1 7.2 错误的种类 1 7.3 错误的诊察与报告 2 7.4 错误处理技术 5 7.4.1 错误改正 5 7.4.2 错误局部化处理 5 7.4.3 语法分析中的错误局部化处理 6 7.5 遏制重复报告错误信息 8 7.6 错误处理小结 9 7.1 概述概述 概述概述 程序员在编写程序时,很难一次就将程序写得完美无误,尤其是一些比较复杂的程序。 这些程序往往有这样或那样的错误,比如违反语言的语法和语义规定的错误,源程序超出了 计算机系统的某种限制而引发的错误,等等。所以为了帮助程序员发现并改正错误,编译器 应该具有错误处理的能力,使得它们不仅可以对语法和语义上正确的源程序进行正确的编 译,生产等价的目标代码,同时还能够对有错误的源程序报错,甚至在一定程度上对错误进 行改正。 这里需要注意的一点是,编译器不能一发现错误就停止编译,而是要对错误进行适当的 处理,从而使编译工作能够继续往下进行,总的来讲编译器应该具有以下错误处理能力: □ 诊察出各类错误的能力。 □ 准确指出出错位置和错误性质的能力。 □ 通过一次编译找出尽可能多的源程序中错误的能力。 □ 一定的错误改正能力。 如果编译器具有以上所说的几项错误处理能力,那么它具有较强的错误处理能力。下面 的章节里,我们将针对上面提到的几项内容对编译器的错误处理功能进行介绍,同时结合 GJC 中有关代码进行分析。 7.2 错误的种类错误的种类 错误的种类错误的种类 从编译器的角度来讲,一般将源程序的错误分为语法错误和语义错误两大类。 所谓语法错误是指,源程序中含有不符合语法规则的成分时所产生的错误。比如下面这 段代码: for (int i=0, i100, i++) System.out.println(i) 这里有三处错误,前两处是 for 循环中的两个分号 “;”都写成了逗号“,”,第三处错 误是最后一条打印语句少了一个分号。语法错误是一种比较简单的错误,一般来说它可以在 编译过程中的词法分析和语法分析阶段查找出来,同时改正这些错误相对也比较容易。 语义错误主要包括两个方面,一是源程序不符合语义规则,二是超越具体计算机的限制。 一般来讲,一种语言除了有确定的文法外,它还要有确定的语义规则。对于一般的高级语言, 主要的语义规则有:标识符要先声名然后才能引用;对标识符的引用要符合作用域的规定; 标识符的引用必须和说明相一致;实在参数和形式参数的个数必须相等、且依次具有相同的 种类和类型等等。比如下面这段代码: for (i=0 ;i100 ;i++) System.out.println(i) ; 其中 “i ”没有被声明而直接使用了,这是一个错误。 超越具体计算机系统限制的错误一般是指溢出错误。例如编译过程中符号表、常数表、 工作单元区、工作栈、数据存储区的溢出等等。 7.3 错误的诊察与报告错误的诊察与报告 错误的诊察与报告错误的诊察与报告 编译器在查找到源程序中的错误时,要对这些错误进行报告,报告的内容主要是错误发 生的位置以及错误的性质。有了这两点内容,程序员就可以比较方便的确定错误并对其进行 改正。 对于错误的报告通常有两种方式。 第一种方式是分析完源程序后再打印。采用这种方式时,编译器需要在内存中开辟一片 存储区,将分析过程中诊察出的错误保存在该存储区中。当源程序分析完以后,编译器将存 储区中的错误信息打印出来。 第二种方式是边分析边打印。每发现一处错误,就把该错误信息打印出来。同时还用箭 头指向出错的位置。GJC 就采用了这种方式来向用户报告错误。 错误信息的具体显示格式并没有一个严格的规定,大体上包含源程序的名字,错误所在 行,错误的具体内容等信息。 对于程序段: for (i=0 ;i100 ;i++) System.out.println(i) ; 中的错误,GJC 将报告如下的错误信息。 PersonTest.java:22: cannot re

文档评论(0)

jgx3536 + 关注
实名认证
内容提供者

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

版权声明书
用户编号:6111134150000003

1亿VIP精品文档

相关文档