0

如何在 Android 中使用 scala 解析器获取 stackoverflowerror?我正在使用这段代码:

val parseEApply: Parser[EApply] =
    ("EApply" ~> "(" ~> parseExpression) ~ ("," ~> parseListExpression <~ ")") ^^ {
  case e ~ l => EApply(e, l)
}

通过使用不同的括号重写它,我摆脱了错误。有人可以解释一下为什么吗?EApply 是一个可以包含其他表达式的表达式,以及一个表达式列表。

val parseEApply: Parser[EApply] =
     "EApply(" ~> parseExpression ~ ("," ~> parseListExpression <~ ")") ^^ {
  case e ~ l => EApply(e, l)
}

那么为什么在第一个而不是第二个中可能存在递归错误呢?

4

1 回答 1

0

我能够通过成对重新组合解析器来部分解决这个问题。所以而不是:

val parseExpression = p1 | p2 | p3 | p4 | p5 | p6 | p7 | p8

我用括号写了

val parseExpression = ((p1 | p2) | (p3 | p4)) | ((p5 | p6) | (p7 | p8))

它毫无怨言地工作。

于 2013-04-10T11:26:40.640 回答