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

Parsing 通过Grako生成的解析器改进错误输出,parsing,grako,Parsing,Grako,我正试图找出改善向Grako生成的解析器的用户显示的错误的最佳方法。Grako生成的解析器在输入文件中遇到某些解析问题时显示的默认解析错误似乎没有帮助。这些错误通常似乎意味着问题出现在输入文件的某个部分,而真正的错误在不同的地方 我一直在研究Grako语义类,以加入一些检查,如果检查失败,这些检查将显示更好的错误消息,但似乎还存在大量必须指定的边缘情况,以便能够捕获规则解析失败的所有可能方式 有人有我可以查看的建议或示例吗?PEG解析器会用尽所有选项,有时会导致与最后一个、也是最不可能的选项对应

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

我一直在研究Grako语义类,以加入一些检查,如果检查失败,这些检查将显示更好的错误消息,但似乎还存在大量必须指定的边缘情况,以便能够捕获规则解析失败的所有可能方式


有人有我可以查看的建议或示例吗?

PEG解析器会用尽所有选项,有时会导致与最后一个、也是最不可能的选项对应的失败

使用Grako,您可以将剪切元素(
~
)添加到语法中,以使解析器在可以确保它们是要匹配的选项时提交到某些选项

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

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

PEG解析器将耗尽所有选项,有时会导致最后一个选项(可能性最小)出现故障

使用Grako,您可以将剪切元素(
~
)添加到语法中,以使解析器在可以确保它们是要匹配的选项时提交到某些选项

term = '(' ~ expression ')' | int ; 
Cut元素还修剪了备忘录缓存,从而提高了解析器的性能。

请参阅