问题标签 [error-recovery]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
24 回答
8915 浏览

language-agnostic - “内存不足”是可恢复的错误吗?

我已经编程很长时间了,我看到的程序,当它们内存不足时,会尝试清理并退出,即优雅地失败。我不记得我最后一次看到有人真正尝试恢复并继续正常运行是什么时候。

如此多的处理依赖于能够成功分配内存,尤其是在垃圾收集语言中,似乎内存不足错误应该归类为不可恢复。(不可恢复的错误包括堆栈溢出等。)

使它成为可恢复错误的有力论据是什么?

0 投票
2 回答
864 浏览

error-handling - 具有固定节点而不是 antlr 中的错误节点的 AST

我有一个使用 C 目标的 antlr 生成的 Java 解析器,它工作得很好。问题是我还希望它解析错误代码并生成有意义的 AST。如果我用一个导入提供一个最小的 Java 类,然后缺少一个分号,它会生成两个“树错误节点”对象,其中“导入”令牌和导入类的令牌应该是。

但是由于它正确解析了以下代码并为此代码生成了正确的节点,因此它必须通过添加分号或重新同步来从错误中恢复。有没有办法让 antlr 反映它在 AST 内部产生的这个固定输入?或者我至少可以以某种方式获得产生“树节点错误”的令牌/文本吗?

在第 200 行附近的 C 目标 antlr3commontreeadaptor.c中,以下片段表明 C 目标目前仅创建虚拟错误节点:

我在这里运气不好,只有Java目标产生的错误节点才能让我检索错误节点的文本?

0 投票
1 回答
655 浏览

unit-testing - 休眠错误恢复

我今天下载了 Rhino Security 并开始进行一些测试。在一个故意引发异常的运行之后,几个完美隔离运行的开始出现错误。这是那个测试:

以下是失败的测试和错误消息:

我将代码更改为使用 nunit 而不是 xunit 所以也许这也是问题的一部分。

干杯,
贝里尔

这是实例化会话的基类

0 投票
1 回答
332 浏览

parsing - 具有错误恢复功能的 GLR 解析器:输入错误时的替代方案太多

前言

我已经编写了具有错误恢复功能的 GLR 解析器。当它遇到错误时,它会分成以下替代方案:

  1. 将预期的元素插入输入中(可能是用户刚刚错过了它)并照常进行。
  2. 用预期的元素替换错误的元素(可能是用户刚刚输入错误)并照常进行。
  3. 跳过错误元素,如果下一个元素也是错误的,则转到#2。

但是,如果输入有很多错误(例如,用户错误地将 JPEG 文件提供给解析器),则替代方案的数量会呈指数增长。

例子

这样的解析器对应如下文法:

适用于以下文本:

在中等现代的台式计算机上因“内存不足”而失败。

问题

如果输入错误,如何减少备选方案的数量?

0 投票
0 回答
94 浏览

parsing - Sun(或 Oracle)JDK 解析器和错误恢复技术

有谁知道 Sun(或 Oracle)JDK 解析器使用什么解析和错误恢复技术?我特别感兴趣的是产生的高质量错误消息(准确的错误位置+相关的语句和/或表达式,非常简洁)以及在继续解析之前尽可能少地跳过标记的能力(因此它仍然可以解析正确的构造并且不不要错过最近的可能错误)

0 投票
1 回答
686 浏览

java - 这个 LimitedInputStream 正确吗?

我写了一个名为LimitedInputStream. 它环绕一个现有的输入流,以限制从它读取的字节数到指定的长度。它可以替代:

这需要额外的缓冲区。

这是课程:

用例:

您能否对我的课程进行代码审查以查找任何严重的错误,例如更新时可能出现的错误left

0 投票
1 回答
431 浏览

error-handling - What is ANTLR3 error recovery method?

This seems to be a theoretical question.

As I far as I know ANTLR3 handles errors itself using its recover(###) method. I want to know what the method ANTLR3 uses for error recovery. (i.e. panic-mode/phrase-level etc.) Can someone help me figure this out?

It would be nice if someone can show me the declaration of its recover method, if my first guess is correct. Thank you.

0 投票
6 回答
1110 浏览

c++ - 从异常中恢复

在我们的应用程序 (c++) 中,我们使用 LoadLibrary 加载第 3 方 DLL。有时这些 DLL 会导致异常,例如“访问冲突读取位置 0x00000000..”。

是否可以从这种异常中恢复,例如使用 try & catch 或其他机制?在其他世界中,是否有可能在同一进程中创建一个沙箱来承受此类事件?

谢谢

0 投票
1 回答
3527 浏览

parsing - 野牛错误恢复

我发现我可以在语法规则中使用“错误”作为错误恢复的机制。因此,如果出现错误,解析器必须丢弃当前行并从下一行恢复解析。野牛手册中实现此目的的示例可能是这样的:

但我不能使用它;因为我必须让 flex 在我的扫描仪中忽略 '\n',因此表达式不限于在一行中表达。鉴于没有特殊字符(即分号)来指示表达式结束并且没有“换行符”标记,我如何使解析器在遇到错误时继续解析到下一行?

谢谢..

0 投票
1 回答
2526 浏览

java - 如何阻止 ANTLR 抑制语法错误?

所以我正在使用 ANTLR 在 Java 中编写一个编译器,我对它如何处理错误感到有些困惑。

默认行为似乎是打印一条错误消息,然后尝试通过令牌插入等方式从错误中恢复并继续解析。我原则上喜欢这个;这意味着(在最好的情况下)如果用户提交了多个语法错误,他们将在每个错误中收到一条消息,但它会提及所有错误,而不是强制他们重新编译以发现下一个错误。默认错误消息对我来说很好。当它完成读取所有令牌时,麻烦就来了。

当然,我正在使用 ANTLR 的树构造函数来构建抽象语法树。虽然通过语法错误继续解析很不错,这样用户就可以看到所有错误,但一旦完成解析,我希望得到一个异常或某种指示输入在语法上无效的指示;这样我就可以停止编译并告诉用户“对不起,修复你的语法错误,然后再试一次”。我不希望它根据它认为用户试图说的内容吐出不完整的 AST,并继续进行下一阶段的编译,没有任何迹象表明出现任何问题(除了出现的错误消息)到控制台,我看不到)。然而,默认情况下,它正是这样做的。

Definitive ANTLR Reference提供了一种在检测到语法错误后立即停止解析的技术:覆盖mismatchandrecoverFromMismatchedSet方法来 throw RecognitionExceptions,并添加一个@rulecatch动作来做同样的事情。这似乎失去了从解析错误中恢复的好处,但更重要的是,它只是部分起作用。如果缺少必要的标记(例如,如果二元运算符的一侧只有一个表达式),它会按预期抛出异常,但如果添加了无关的标记,ANTLR 会插入它认为属于那里的标记并继续其愉快的方式,产生一个除了控制台消息之外没有任何语法错误指示的 AST。(更糟糕的是,它插入的令牌是EOF,所以文件的其余部分甚至没有被解析。)

我确信我可以解决这个问题,例如,向isValid解析器添加类似字段的内容并覆盖方法并添加操作,以便在解析结束时,如果有任何错误,它会引发异常。但是有更好的方法吗?我无法想象我正在尝试做的事情在 ANTLR 用户中是不寻常的。