gpt4 book ai didi

parsing - 解析器错误-自动生成错误处理的模式

转载 作者:行者123 更新时间:2023-12-04 05:11:57 26 4
gpt4 key购买 nike

有什么已知的方法可以对机器生成的解析器实现良好的错误处理吗?
是否存在针对此类问题的“模式”或已知算法?

对于“好”,我的意思是类似于手工制作的递归下降解析器和现代编译器可获得的结果:
解析器不会在出现第一个错误时就停止,而是可以发出“有意义的”错误,而不仅仅是发出“xyz行中无法识别的标记”一次错误。

理想情况下,这种方法也应该是自动化的,而不是
手工制作的。

我不是在寻找库,而是需要一种可以在不同平台上使用的方法,理想情况下,它应尽可能地独立于语言。

最佳答案

使用传统的YACC/野牛生成器,您会得到yyerror/YYERROR框架,由于LALR解析器的无序回溯特性,使用该框架很难生成非常有用的错误消息。
您甚至可以在其中添加错误恢复规则,因为您可能需要它们来抑制失败规则中的错误错误消息,而这些错误消息仅是您想解析的规则。

使用基于PEG的解析器,您可以获得更好的~{}后缀错误操作块语法。参见例如。 peg manual

  rule = e1 e2 e3 ~{ error("e[12] ok; e3 has failed"); }
| ...

rule = (e1 e2 e3) ~{ error("one of e[123] has failed"); }
| ...

您会在错误的实际位置收到出色的错误消息。但是您必须编写PEG规则,尤其是要编写起来并不容易。处理运算符优先级时。使用LALR解析器更容易。

使用更简单的 recursive descent parser生成器,您可以获得与PEG相同的错误报告优势,但解析速度要慢得多。

http://lambda-the-ultimate.org/node/4781上看到相同的讨论

关于parsing - 解析器错误-自动生成错误处理的模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33708817/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com