在parboiled2中,我应该如何在解析器操作中报告错误?

时间:2017-04-20 16:56:44

标签: scala parboiled2

在parboiled2中解析器操作中报告错误的最佳方式是什么(我使用v 2.1.4)?

例如,假设我想读取整数值并报告错误,如果它不在预期范围内?我尝试调用fail,但这在解析器操作中似乎没有效果。另外,我无法告诉我应该如何为test规则提供堆栈值。我只是抛出ParseError例外吗?

更具体一点,请考虑以下规则:

def Index = rule {
  capture(oneOrMore(CharPredicate.Digit)) ~> {s => // s is a String
    val i = s.toInt
    if(i > SomeMaxIndexValue) ??? // What do I put here?
    else i
  }
}

1 个答案:

答案 0 :(得分:4)

您可以使用test。诀窍是动作也可以返回Rule

def Index = rule {
  capture(oneOrMore(CharPredicate.Digit)) ~> {s =>
    val i = s.toInt
    test(i <= SomeMaxIndexValue) ~ push(i)
  }
}