2
想我嘗試解析字符串ABC有Packrat分析器:Packrat解析器衝突
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 | Q等於P如果P成功,所以在這種情況下ab
應與「AB」所取代,而不是「一個」,因爲它確實如果我更換ab
:
lazy val ab: PackratParser[AnyRef] = ab ~ "b" | "a"