问题标签 [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 投票
2 回答
1161 浏览

c++ - 缺少分号的 Bison C++ 多错误恢复

我正在开发自己的编译器,但在 java 语法的恐慌模式下的错误恢复设计存在问题。

我想过多种解决方案,但真正的问题是:

我怎么能用 bison c++ 做到这一点?

我这样做了:

包 2

导入java.lang.*;

错误必须消耗到第一个分号,并且使用规则正确运行

package_rule: 包错误 ';'

但是如果我写了这段代码:

包 2

导入 java.lang.*

类 y { void 方法() { int m }

}

我需要像标准编译器这样的解析器来报告错误:

包装行应有标识符。失踪 ';' 在导入指令行报告一个包。发短信';' 在 int m 线。

我的意思是我需要在包错误之后使用令牌直到第一个分号或在声明它们之前在最后一行找到类或接口声明时停止!并报告行后发现的任何其他错误:

int m // 缺少 ';'

请帮助我,在我看来有多种解决方案,但是如何使用 bison c++ for java 语法呢?

0 投票
1 回答
845 浏览

android - Android后台网络错误恢复

给定一个 Android 意图服务,其工作是进行后台网络通信(例如,进行 REST 调用以同步数据),当意图服务捕获到 时IOException,从错误中恢复的良好做法是什么?

假设传输的数据量足够小,我们可以从头开始重试网络操作。如果设备失去网络连接,我们希望在连接恢复时收到通知,然后重试。如果我们没有失去连接,我们假设服务器或其网络链接已关闭,并希望在延迟后重试。

尽快完成通信操作并不重要,但更快确实意味着更好的用户体验,尽管它必须权衡带宽使用和电池寿命。

希望这是一个常见的要求,并且该功能已融入 Android。如果是,它在哪里,或者如果不是,智能重启 Intent 服务的代码会是什么样子?

0 投票
1 回答
487 浏览

file - Erlang 可以清理崩溃/卡住进程的打开文件描述符吗?

如果一个进程崩溃了,那些只被那个 erlang 进程引用的文件描述符会发生什么?有没有办法让 erlang 像操作系统进程或一些可能有帮助的设计模式一样自动清理?

0 投票
1 回答
1093 浏览

parsing - 解析器生成器中的错误报告和恢复

我认为解析器生成器是您的编程工具包中的一个非常好的工具,所以在玩了一些之后,我编写了自己的工具,只是为了更好地理解事物,结果证明它比我预期的要好,所以我坚持使用它。

最近困扰我的一件事是错误报告和恢复。我做的不是很好。我知道一种方法是令牌同步,但线索似乎停在那里。除了滚动您自己的递归下降解析器并包括各种启发式方法之外,在解析器生成器中处理错误报告和错误恢复的一些通用方法是什么?

0 投票
1 回答
311 浏览

perl - Marpa 解析器库是否支持错误恢复?

我知道Perl 的“Marpa” Earley 解析器有很好的错误报告

但我无法在其文档中或通过谷歌搜索找到它是否有错误恢复

例如,大多数 C/C++ 编译器都有错误恢复功能,它们用于报告多个语法错误,而其他编译器通常会在第一个错误处停止。

我实际上是在解析自然语言,想知道是否有办法在输入的一部分失败后重新同步和恢复解析。


例如,对于那些可以理解它的人:

我正在解析老挝语的音节。在老挝语中,一些元音是变音符号,它们被编码为单独的字符并呈现在前一个辅音之上。在解析老挝维基百科的随机文章时,我遇到了一些这样的元音加倍的文本。这在老挝语正字法中是不允许的,所以一定是错字。但我知道在几个字符内,文本又好了。

无论如何,这是一个真实的例子,它激起了我对错误恢复或与令牌流重新同步的普遍兴趣。

0 投票
3 回答
3485 浏览

yacc - Python Lex-Yacc (PLY) 输入结束时的错误恢复

问题

我正在尝试使用 Python Lex-Yacc (PLY) 实现容错解析器,但在输入字符串的末尾使用错误恢复规则时遇到问题。

如何从输入的意外结束中恢复?

例子

此示例语法生成形式为的字符串A END A END A END A END ...

如果省略了 END 令牌,我想执行错误恢复,因此解析器会识别A A A END或识别刺痛。A A A

我的方法

我添加了一个错误恢复规则,它允许我接受像这样的输入A A A END

这使我可以接受以下输入: A A A END

但是,如果省略最后一个 END 标记 ( A A A),我仍然会收到语法错误并且无法恢复。


示例层代码

0 投票
1 回答
179 浏览

c++ - 不对错误 Bison 执行任何语义操作

我必须在野牛中构建一个编译器。我希望我的编译器像大多数编译器一样工作,如果有任何语法错误,请将它们全部列出,然后退出。问题是我对每个规则都有语义操作,我的编译器报告了所有的语法错误,但仍然执行了所有的语义操作。如果有语法错误,有没有办法告诉野牛忽略语义动作,但继续寻找所有语法错误?

谢谢!

0 投票
1 回答
71 浏览

distributed-computing - 分布式恢复 - 这可以在没有超时的情况下完成吗?

我们有一个邮件发件人应用程序,它在一个 blob 中接收一堆邮件,然后将所有这些邮件放入数据库。这可能需要十分钟。在此过程中,邮件的状态为BUILDING

完成后,状态变为READY

当服务器崩溃(当然不应该发生)并重新启动时,它会查找所有带有状态的邮件BUILDING并将它们标记为ERROR. 发生这种情况是因为我们不想发送不完整的邮件。


现在我们想使用第二台服务器进行扩展。上面的恢复策略在这里不起作用。

例如,服务器 1 是BUILDING邮件,服务器 2 崩溃并重新启动。现在服务器 2 将看到BUILDING邮件并且不知道它是否已被中止或它是否正在另一台服务器上运行。


那么分布式服务的最佳恢复策略是什么?

(我们考虑了一些超时机制,BUILDING服务器每隔几秒更新一次时间戳,当某些服务器重新启动时,它会检查是否有BUILDINGx 分钟未更新的邮件。那么很有可能该邮件已被中止。 )


编辑:

我想要实现的目标:如果某个服务器重新启动(在崩溃之后或仅仅因为我们向集群添加了一个新的邮件服务器),它不应该邮件标记为ERROR好像这个特定的邮件实际上正在构建(由另一台服务器)。

很高兴:如果这无需存储服务器 ID 就可以工作,因为这样就可以轻松添加和/或删除服务器。否则,将无法完全删除某些服务器,因为那时可能会有BUILDING带有该特定服务器 ID 的邮件。但是该服务器已被删除,并且永远不会重新启动。尽管唯一可以将邮件设置为的服务器ERROR将消失。

0 投票
1 回答
1603 浏览

antlr - 怎么修?Xtext 语法在输入不正确时停止解析,并出现“输入时没有可行的替代方案......”

作为 Xtext 和 Antlr 的新手,我正在努力为我想要解析的(与 JVM 无关的)语言的一个非常简单的子集获取容错 Xtext 语法。

这种迷你语言的文档可能如下所示:

$c因此,由和关键字包围的一系列语句$.,中间有一个或多个可能不包含$. 并且所有内容都由强制性空格分隔。

我能想到的最好的语法是以下语法:

在有效输入上,此语法可以正常工作。但是,在无效输入上,例如

只有一个no viable alternative at input '$.'错误class

我尝试了各种变体(使用=>、有/无terminal声明、启用回溯等等),但我得到的只是no viable alternative at input ....

所以我的问题是:我应该如何为这种语言编写语法,以便 Antlr 进行某种形式的错误恢复?还是我做错了什么?

例如,来自http://zarnekow.blogspot.de/2012/11/xtext-corner-7-parser-error-recovery.html我希望这可以开箱即用。或者这是因为我没有使用基于 Xbase 的类似 Java/C 的语法?

0 投票
2 回答
101 浏览

html - 为什么标签使用不佳和不当的 HTML 仍然有效?

tl;dr 版本是为什么不能正确关闭标签的 html 仍然可以正常工作?

我每天都在学习越来越多的 HTML,但我还是个初学者。所以我不明白为什么在没有正确关闭标签的情况下编写糟糕的 HTML 仍然有效。我在工作中使用电子邮件模板来完成一项任务,并且对它背后的 HTML 感到好奇,所以我将代码加载到编辑器中。

我遇到了 9 个不关闭<td> <center> <div> <p> <div> <td> <tr> tbody> <table>的单独标签:代码以<html>应有的标签开头,但在and<body>之后,它开始另一组标签。在这两个标签中,他们都说同样的事情并且有一个额外的右大括号。<table><tr><html> <head>... etc<style>li { margin-bottom: 10px; } }

当我将这段代码加载到我的浏览器中时,页面仍然可以直观地显示它应该如何。但在 Firebug 中,在第一个 body 标记之后,它会跳过 table、tr、html、head 和 body,直接显示第一个<div>.

<html>为什么缺少关闭标签、额外标签和标签等的网页(因为我确信这一定是一件很常见的事情)<body>仍然能够正常运行?