Next: Start Decl, Previous: Type Decl, Up: Declarations
文法の中に衝突(see Shift/Reduce Conflicts)があると、
Bisonは通常警告を表示します。
しかし、実際の文法のほとんどは、無害なシフト還元衝突を含み、
その衝突は、予測可能な方法で回避できますが、除去は困難です。
衝突の数が変わらないかぎり、このような衝突の警告は
抑制させるべきです。
そのために、%expect
宣言を使います。
次のように宣言します。
%expect n
ここで、nは10進の整数です。 この宣言によって、n個のシフト還元衝突があって、 還元/還元衝突がなければ、警告が表示されません。 シフト還元衝突の数がnでなかったり、 1つでも還元/還元衝突があった場合は、通常の警告が表示されます。
一般に、次のような手順で%expect
を使います。
%expect
なしで文法ファイルをコンパイルします。
衝突が起こる位置の詳細な目録を得るために、‘-v’オプションを指定します。
Bisonは、衝突の数も表示します。
%expect
宣言を追加します。
すると、Bisonはチェックした衝突について文句をいわなくなりますが、 文法ファイルを書き換えて衝突の数が変わると、 再び警告を表示します。