Scala PackratParser忽略失败解析器

时间:2015-03-27 12:40:41

标签: scala parsing parser-combinators

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

在解析具有深层嵌套表达式的语法时,它有一些严重的性能问题。因此,我创建了一个版本,我将其混合在Scala' PackratParsers - link

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

用于正确报告“无效规则”的旧(非包装)解析器'失败,通过失败解析器组合| failure("Invalid rule") - link

当使用packrat-parser版本时,如果我启用跟踪,我可以从跟踪中看到失败是在非packrat版本中创建的,但是PackratParser似乎忽略了这一点并且始终返回{{1相反。

使用我需要了解的PackratParsers时,故障处理有什么不同吗?

1 个答案:

答案 0 :(得分:1)

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