Scala PackratParser忽略失败分析器

我有一个用Scala的RegexParsers – 链接编写的parsing器

在分析深度嵌套expression式的语法时,它有一些严重的性能问题。 因此,我创build了一个混合了Scala的PackratParsers 链接

Packrat版本不具有相同的性能问题,并正确parsing语法。 但是,当我提供一个无效的语法testing,例如这个

旧的(非packrat)parsing器用于通过失败parsing器组合器正确报告“无效的规则”失败| failure("Invalid rule") | failure("Invalid rule")在这里 – 链接

当使用packratparsing器版本时,如果启用跟踪,我可以从跟踪中看到,失败的创build方式与非包装版本相同,但是PackratParser似乎忽略了这一点,并始终返回failure: Base Failure

使用PackratParser时,有什么不同的处理方式需要我理解?

似乎你需要使用err("Invalid rule")而不是failure ,因为它保证不会执行回溯。