我有一个使用Scala编写的解析器RegexParsers
- link
在解析具有深层嵌套表达式的语法时,它有一些严重的性能问题。因此,我创建了一个版本,我将其混合在Scala' PackratParsers
- link
Packrat版本没有出现相同的性能问题并正确解析语法。但是,当我提供无效的语法进行测试时,例如this
用于正确报告“无效规则”的旧(非包装)解析器'失败,通过失败解析器组合| failure("Invalid rule")
- link
当使用packrat-parser版本时,如果我启用跟踪,我可以从跟踪中看到失败是在非packrat版本中创建的,但是PackratParser似乎忽略了这一点并且始终返回{{1相反。
使用我需要了解的PackratParsers时,故障处理有什么不同吗?
答案 0 :(得分:1)
似乎您需要使用err("Invalid rule")
而不是failure
,因为它可以保证不会执行回溯。