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ありidentますassstm

および parensを使用するルールは、パーサーの実行を中止して、 (失敗ではなく)エラーidentを発生させる可能性があります。

于 2012-09-30T15:13:09.533 に答える