编译器设计中的错误处理是什么?


检测和报告源程序中的错误是编译器的主要功能。错误可能发生在编译的任何阶段。一个好的编译器必须准确地确定程序中发生错误的行号。在编译的不同级别可能发生各种错误,如下所示:

  • 首先是词法(扫描器)错误 - 这里最常见的一些类型包括非法或无法识别的字符,主要由输入错误引起。一种常见的情况是程序员输入的字符在该语言中任何情况下都是非法的,并且从未使用过。扫描器可以检测到的另一种错误是未终止的字符或字符串常量。每当程序员在引号中键入内容并忘记尾随引号时,就会发生这种情况。

  • 第二类错误是语法错误 - 这些错误由解析器捕获。这些错误是最常见的错误之一。困难的部分是决定在发现错误后从哪里继续语法分析。如果解析器编写不仔细,或者错误检测和恢复方案不完善,解析器将遇到一个错误并在之后“混乱”,并在程序的其余部分给出错误的错误消息。

如果发生错误,人们希望看到的是编译器跳过任何不正确的标记,并继续检测错误,而不会生成不是错误而是第一个错误的结果的错误消息。这个方面非常重要,以至于一些编译器根据其错误检测系统的优劣进行分类。

  • 第三类错误是语义错误 - 计算机语言中使用的语义远比口语中使用的语义简单。这是因为在计算机语言中,一切都是非常明确定义的。程序中可能出现的语义错误与以下事实有关:某些语句从语法的角度来看可能是正确的,但它们毫无意义,并且无法生成任何代码来执行语句的含义。

  • 第四类错误可能在代码优化期间遇到 - 在控制流分析期间,可能存在一些永远无法到达的语句。

  • 第五类错误可能发生在代码生成期间 - 在代码生成中,计算机的体系结构也起着重要作用。

  • 第六类错误可能在编译器尝试创建符号表条目时遇到 - 在此过程中,可能存在具有相互矛盾属性的多个声明的标识符。

更新于:2021年10月23日

5K+ 次浏览

启动您的职业生涯

完成课程获得认证

开始学习
广告
© . All rights reserved.