假设我尝试用Packrat Parser解析一个字符串abc:
lazy val abc: PackratParser[AnyRef] = ab ~ "c"
lazy val ab: PackratParser[AnyRef] = (ab | abc) ~ "b" | "a"
def parse(in: String) = parseAll(abc, in)这里我使用Packrat解析器支持的左递归,但我不明白为什么它会失败。根据Parser文档,如果P成功,则P=P,因此在本例中,ab应替换为"ab“,而不是"a”,就像我将ab替换为:
lazy val ab: PackratParser[AnyRef] = ab ~ "b" | "a"发布于 2011-03-28 08:28:00
Packrat解析器支持左递归,但它是否支持规则之间的循环(没有进展)。
这就是你所拥有的: abc叫ab,也可以叫abc。
也许你应该试着把它放在abc规则中以避免循环。
https://stackoverflow.com/questions/4979469
复制相似问题