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

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

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

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

最佳答案

使用自上而下的PEG,您可以自动或手动包含“剪切”功能,因此您可以在尽可能接近错误源的位置报告错误。请参见Grako和引用的article by Kota Mizushima。在输入中看到某些标记后,“剪切”会使替代项无效,因此解析器可以知道如何尽早失败。

总的来说,我不喜欢错误恢复,因为Turbo Pascal曾经证明过,第一次出现后报告的错误往往很麻烦。

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

关于parsing - 解析器生成器中的错误报告和恢复,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21950661/

相关文章:

javascript - 使用javascript提取字符串的特定部分

matlab - 错误类型为 'min'的输入参数的未定义函数或方法 'struct'

error-handling - 通过 ETL 从 Informatica Log 检测错误

java - 创建没有指针别名的编程语言的可能性

Python3,通过单击按钮从url下载文件

javascript - jQuery + parseDouble 问题

java - JSOUP 从属性中删除多次出现的单词

json - 每当引用从函数返回的 slice 或映射时为空指针

c - 如何在 Turbo C 中创建真值表

c++ - 如何解释自定义语言