0

これが私の bnf グラマーの一部です。

//this works
<ter-stmnt>     ::= <rval> '?' <rval> ':' <rval>
//this gets an error
<ter-stmnt>     ::= <bool-val> '?' <rval> ':' <rval>
<bool-val>      ::= <rval>

これは非常識に思えますが、2 番目は 1 番目とまったく同じであるべきではありませんか? 読むときは2番目のbcを好みます。何でも意味する一般的なrvalとは対照的に、bool値を期待していることがわかります。

Gold Parser 3.4.4 を使用しています

4

2 に答える 2

2

あなたが得ているエラーは次のとおりです。

Reduce-Reduce Conflict
'?' 複数の完全なルールに従うことができます。Reduce-Reduce エラーは、文法が同じトークンに対して 2 つ以上のルールを同時に簡約できる場合に発生します。文法があいまいです。詳細については、ドキュメントを参照してください。

いくつかのトークンを評価した後、単に a を読み取ったの<bool-val>か、それとも を読み取ったのかを判断できないと言っています<rval>

<bool-val>より意味をなすには、文法で aが具体的に何であるかを述べてから、an<rval>が a<bool-val>またはその他のものであると述べる必要があります。

これは、reduce/reduce エラーの別の例です。GOLDのドキュメントは次のとおりです。Gold は shift/reduce について隠そうとします (つまり、エラーではなく警告を発します) が、reduce/reduce をエラーとして扱います。

私はこれを完全には理解していません。私は解析が初めてです。これが予期しない動作であることについて、あなたは正しいでしょうか?しかし、GOLD メーリング リストは現在停止しているようです。これはおそらくモデレートされており、Devin が数か月間オフラインになっているためです。

于 2009-08-05T13:51:04.013 に答える
0

どのようなエラーが表示されますか? 文法ファイル全体を含めることはできますか? 次のようなルールを宣言してもエラーは発生しません...

<ter-stmnt>     ::= <bool-val> '?' <rval> ':' <rval>
<bool-val>      ::= <rval>
<rval>  ::= '!'
于 2009-08-03T05:42:00.000 に答える