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

时间:2014-02-22 06:28:03

标签: parsing error-handling parser-generator error-recovery

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

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

1 个答案:

答案 0 :(得分:4)

使用自上而下的PEG,您可以自动实施“剪切”功能,也可以手动包含,因此您可以尽可能靠近其来源报告错误。请参阅Grako和引用的article by Kota Mizushima。在输入上看到某些令牌后,“cut”会使备选项无效,因此解析器可以知道如何提前失败。

一般来说,我不喜欢错误恢复,因为在第一次报告之后报告的错误往往是令人讨厌的,正如Turbo Pascal曾经证明的那样。

恢复的一般策略是对输入序列执行重写,插入或删除,以便解析器可以继续。对于仅基于删除的简单恢复策略(跳过输入直到预期令牌),请参阅Wirth's A+D=P的第5.9节。