0

这是我的解析器

def assstm: Parser[Any] = indexop ~ ":=" ~ expression ~ ";"
def indexop: Parser[Any] = ident ~ "[" ~ expression ~ "]"

myArray[5] 存在错误:= 5

``('' expected but `[' found

但是有了这个解析器

def assstm: Parser[Any] = indexop ~ ":=" ~ expression ~ ";"
def indexop: Parser[Any] = "[" ~ expression ~ "]"

我用 [5] := 5 测试,没有错误。

怎么了?

4

1 回答 1

1

我们需要您的更多语法片段来完全回答您的问题。但是,这看起来像是一个回溯问题:您可能已经定义了一个测试多个备选方案的规则,每个备选方案使用ident: 一个 whereident必须后跟括号,以及您的assstm规则。

使用ident和括号的规则可能会引发错误(而不是失败),从而中止解析器的运行。

于 2012-09-30T15:13:09.533 回答