4

同様の質問著者のウェブサイトから、次のような解決策が得られます。

Identifier "identifier"
  = !ReservedWord [A-Za-z_]+

ReservedWord
  = "test"
  / "abc"

このソリューションは、この「test_var」のような識別子を解析できません。

この例では、文法 !ReservedWord は、"test" または "abc" で始まるすべての変数を除外します。

前もって感謝します。

4

1 に答える 1

6

ReservedWord次の内容に関係なく、予約語が完了すると成功します。したがって、解決策は、より多くの識別子文字を含むより長い一致がある場合に失敗させることです。

Identifier "identifier"
  = !ReservedWord [A-Za-z_]+

ReservedWord
  = ( "test" / "abc" ) ![A-Za-z_]
于 2012-07-30T11:35:15.610 に答える