2016-03-25 9 views
0

を扱うときにシフト/競合解決を削減(YACC - バイソン)私は、次のルールに定義したファイル:バイソン:.Yの文法上の任意のルールで

C:Eを| D | F | A

A:B | B '[' C ']';

:私は、次のシフトを取得し、適切な字句解析ファイルを使用して、適切な方法で.Yファイルをコンパイルするとき

(これはオプションの[C]とBのようなものがある) \競合を減らします状態48
74 A:B。
75 | B。 '[' C ']'
'[' シフト、および状態に行く91
'[' [(A)

ルール74を使用して減らすルール74(A)]
$のデフォルトを使用して減らします私の問題は、それが前任者であるならば、次のようなものです。問題は、このエラーの解決策を見つけることができず、ドキュメントの時間を検索していることです。 これを修正するにはどうすればよいですか(コード固有のものにしてください)。

+1

あなたのエラーを再現するのに十分な情報が提供されていません。私があなたの例からbisonファイルを作成するとき、私は何の問題も見つけません。エラーを再現するコードをもっと表示してください。 –

答えて

1

Aの後に[が続く可能性のあるコンテキストがあるという問題があります。文法の詳細を見ることなく、より正確にすることは不可能です。

しかし、bison/yaccはあなたが望むものとまったく同じことを行うことに注意する価値があります。シフトのために競合を解決してください。だから警告を除いて、すべてがうまくいくはずです。

0

ルールを拡張しようとすると、取得

状態1 2つの可能な状態:

A -> B 

状態2:Aのための

A -> B 
A -> BC 

すべての可能な状態は以下の通りです

Bisonは、B入力の状態1または2にいるかどうかを判別できません。

あなたは(BとCは、トークンと仮定)によってルールを置き換えることができます。

A: B | B C 
関連する問題