改进 Grako 生成的解析器的错误输出

Improving errors output by Grako-generated parser

我正在尝试找出改进向 Grako 生成的解析器用户显示的错误的最佳方法。似乎 Grako 生成的解析器在输入文件中遇到某些解析问题时显示的默认解析错误没有帮助。这些错误通常似乎暗示问题出在输入文件的一部分,而真正的错误却在不同的地方。

我一直在研究 Grako Semantics class 以进行一些检查,如果检查失败,这些检查会显示更好的错误消息,但似乎也可能有大量的边缘情况必须指定能够捕获规则解析失败的所有可能方式。

有没有人有我可以查看的任何建议或示例?

PEG 解析器会用尽所有选项,有时会使您遇到与最后一个也是最不可能的选项相对应的失败。

使用 Grako,您可以将 cut 元素 (~) 添加到语法中,让解析器在确定它们是特定选项时提交某些选项匹配。

term = '(' ~ expression ')' | int ; 

剪切元素还会修剪记忆缓存,从而提高解析器性能。