使用scala解析器的android上的Stackoverflow错误

时间:2013-04-05 22:45:33

标签: android parsing scala

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

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)
}

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

1 个答案:

答案 0 :(得分:0)

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

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

我用括号写了

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

它没有任何投诉。