Scala PackratParser忽略故障分析器

Scala PackratParser忽略故障分析器,scala,parsing,parser-combinators,Scala,Parsing,Parser Combinators,我有一个使用Scala的RegexParsers编写的解析器 当解析具有深度嵌套表达式的语法时,它会遇到一些严重的性能问题。因此,我创建了一个版本,在这个版本中,我混合使用了Scala的PackratPassers- Packrat版本没有表现出相同的性能问题,并且正确解析了语法。但是,当我为测试提供无效语法时,例如 旧的(非packrat)解析器用于通过故障解析器组合器正确报告“无效规则”故障|故障(“无效规则”)此处- 当使用packrat解析器版本时,如果启用跟踪,我可以从跟踪中看到故障的

我有一个使用Scala的
RegexParsers
编写的解析器

当解析具有深度嵌套表达式的语法时,它会遇到一些严重的性能问题。因此,我创建了一个版本,在这个版本中,我混合使用了Scala的
PackratPassers
-

Packrat版本没有表现出相同的性能问题,并且正确解析了语法。但是,当我为测试提供无效语法时,例如

旧的(非packrat)解析器用于通过故障解析器组合器正确报告“无效规则”故障
|故障(“无效规则”)
此处-

当使用packrat解析器版本时,如果启用跟踪,我可以从跟踪中看到故障的创建与非packrat版本中的一样,但是PackratParser似乎忽略了这一点,总是返回
failure:Base failure


使用PackRatPassers时,故障处理是否与我需要了解的有所不同?

似乎您需要使用
err(“无效规则”)
而不是
failure
,因为它保证不会执行回溯。

如果我使用
err(“无效规则”)
而不是
failure(“无效规则”)
然后,由于回溯已停止,以前有效的许多其他规则开始返回不正确的
err(“无效规则”)