Scala解析器组合器:如何在与“into”结合时返回中间解析器的内容?

时间:2013-09-16 12:11:54

标签: parsing scala

以下是我要做的事情:

def parser = parser_a >> {
  case a => val c = compute(a) ; parser_b(c)
} ^^ {
  case a ~ b => (a, b)
}

当然它不起作用,因为^^运算符之后的函数只得到parser_b的结果。如何保留parser_a的结果?

1 个答案:

答案 0 :(得分:6)

你可以使用解析器是monadic的事实来编写它,如下所示:

val parser = for {
  a <- parser_a
  b <- parser_b(compute(a))
} yield (a, b)

或者,您可以在解决方案中更改以下行(请注意success这里只是一般monadic return的一个不太具体的版本。)

  case a => val c = compute(a) ; success(a) ~ parser_b(c)

我个人觉得for - 在这种情况下理解力更加清晰。

相关问题