📜  什么是错误恢复

📅  最后修改于: 2022-05-13 01:57:02.869000             🧑  作者: Mango

什么是错误恢复

错误恢复:
这是一个针对错误采取措施以尽可能减少负面影响的过程,也称为编译器在对语法错误采取措施后采取措施并在需要时恢复解析的能力。当我们谈论错误恢复时,我们必须首先考虑错误检测。

错误检测:

  • 编译器检测到的所有可能的错误都会以错误消息的形式直接报告给用户,这种错误检测称为错误检测。
  • 现在如果我们谈论错误检测与错误恢复的关系,那么当我们从编译器中得到这样的错误时,我们必须编写错误恢复来检查代码,也称为错误纠正。
  • 为了深入了解,我们必须了解错误的类型及其在各个阶段的恢复。
  • 首先,编译器中的解析器必须能够在编译过程中检测到程序中的任何错误并向用户报告,当遇到错误时,存在的解析器应该能够处理并传递给用户进行解析其余的输入。

错误类型:
在编译过程中的各个阶段可能会遇到以下四种类型的错误。

  1. 词法错误:当某些标识符名称拼写错误或未检测到时,会发生此错误。
  2. 语法错误:当他们的分号或任何类型的不平衡括号存在时
  3. 语义错误:分配的值的分配不兼容。
  4. 逻辑错误:无限循环或代码无法执行。

错误恢复:
在此之后,可以在解析器中实现三种错误恢复来处理代码中的错误。

  1. 恐慌模式错误恢复 -
    这是防止解析器无限循环的错误恢复最简单的方法,它的工作原理是当解析器在语句中的任何地方遇到错误时,它通过不处理输入来忽略其余语句,例如“;”分号。
  2. 语句模式错误恢复——
    当解析器遇到错误时,它会尝试添加该错误粒子,虚拟地保留在框中,这样一个错误更正也可能导致无限循环,例如,如果在编译语句中缺少分号,它会引入一个虚拟分号和检查语句的其余部分或检查可以被其他单词替换的某些单词,以使代码顺利运行。
  3. 全局校正错误恢复——
    解析器将编译器中的程序视为一个整体产品,目的是弄清楚程序试图做什么,并试图找出程序预期的可能的接近匹配,并以这种方式发现错误并尝试以可能的方式更正其步骤,使其在执行搜索时没有任何错误步骤。
  4. 短语级恢复 -
    它对剩余的输入进行局部校正,这种典型的校正是通过插入和删除无关的分号来替换为分号,对于在检测点之前发生实际错误的情况进行复制具有缺点。

恢复类别:
有两类恢复如下。

  1. 本地恢复 -
    无论在哪里检测到错误,它都会在错误的单个点调整输入。
  2. 全球复苏——
    无论在哪里检测到错误,它都会在错误点之前调整输入。

笔记 -
LL 和 LR 解析技术都应用了这些东西。

结论 :
错误恢复是编译器在编译过程中检测到此类错误后恢复程序解析的能力。解析器从词法分析器中获取字符串标记并进行验证,然后如果检测到任何语法错误则返回。在此,它检查令牌结构并生成解析树以检查是否检测到与语法相关的错误,称为语法错误。