2009-08-03 6 views
0

ここに私のbnf文法があります。ゴールドパーサーのバグ? LALR

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

これは非常識ですが、第2のものは最初のものとまったく同じではありませんか?私は何かを意味することができる一般的なrvalに反対するboolの値を期待することを読む私は2番目のBCを好む。

私はGold Parserを使用しています。3.4.4

答えて

0

どのようなエラーが表示されますか?文法ファイル全体を含めることはできますか? I私は

<ter-stmnt>  ::= <bool-val> '?' <rval> ':' <rval> 
<bool-val>  ::= <rval> 
<rval> ::= '!' 
+0

私の現在の文法にはC++でないものはありませんので、私にメールを送ってください(私のプロフィールで見つけることができます)。私はあなたに文法といくつかのテストファイルを送ります。 –

2

...のようなルールを宣言する場合は、取得しているエラーがあるすべてのエラーを得ることはありません:

削減-reduce衝突
'?'複数の完了したルールに従うことができます。 Reduce-Reduceエラーは、同じトークンに対して、文法によって2つ以上のルールを同時に減らすことができる場合に発生します。文法はあいまいです。詳細については、ドキュメントを参照してください。

それはいくつかのトークンを評価しただ後ことを言って、それはそれだけで<bool-val>を読んだかどうか、それは<rval>を読むかどうかを決定することができませんでしだ。

<bool-val>が具体的にどのようなものなのかを具体的に説明してから、<rval><bool-val>などと書かれています。

もう1つはexample of a reduce/reduce errorhere's the GOLD documentationです。ゴールドは、シフト/リダクションについて隠すようにしようとします(つまり、エラーの代わりに警告を出す)が、reduce/reduceをエラーとして扱います。

私はこれについて完全に理解していません。私は解析するのが初めてです。これが予期せぬ動作であることは正しいでしょうか?しかし、GOLDのメーリングリストは現時点ではダウンしているようですが、おそらくそれは司会者であり、Devinは何ヶ月もオフラインになっているからです。

+0

実際には意味があります。私はそれが同じコードのパスを下っても気にしないだろうと思うが、今はあいまいな/問題であることが分かる –