1

PEG.js を使い始めたばかりで、文法に問題があります (デバッグ用に大幅に簡略化されています)。

start
  = presingle single
  / preplural plural

presingle
  = "a"
  / "b"

preplural
  = "b"
  / "c"

single
  = "d"
  / "e"

plural
  = "dd"
  / "ee"

https://pegjs.org/onlineを使用しています

この文法は解析に失敗しますbdd

Line 1, column 3: Expected "a" but "d" found.

これは PEG ではできないことですか、それとも文法をこれを解析できるものに変換できますか?

PS を解析しようとすると (誤ってアドバイスされましたか?)bda無意味なエラーが発生します。

Line 1, column 3: Expected "a" but "a" found.
4

2 に答える 2

1

この文法は、start の句の順序のみを変更し、bdd で機能します

start = 
   preplural plural /
    presingle single

presingle
  = "a"
  / "b"

preplural
  = "b"
  / "c"

single
  = "d"
  / "e"

plural
  = "dd"
  / "ee"

bda の場合、行 1、列 3 のエラーが表示されます: "dd" または "ee" が必要ですが、"a" が見つかりました。

于 2012-10-31T15:10:15.743 に答える
1

幸いなことに、最近のバージョンの pegjs では、「Line 1, column 3: Expected end of input but "d" found.」というエラー メッセージが表示されます。入力bddが与えられたとき。

最初に 1 つの一致に一致し、"b" と "d" が一致するため、問題がないと見なされるため、これは予想されることです。@HBP で提案されているように順序を逆にすると、最初に複数形に一致するように強制され、複数形が存在しない場合にのみ単一形が試行され、期待どおりの結果が得られます。

于 2015-09-18T22:38:10.543 に答える