次: , 前: Type Decl, 上: Declarations


3.6.5 衝突警告の回避

文法の中に衝突(see Shift/Reduce Conflicts)があると、 Bisonは通常警告を表示します。 しかし、実際の文法のほとんどは、無害なシフト還元衝突を含み、 その衝突は、予測可能な方法で回避できますが、除去は困難です。 衝突の数が変わらないかぎり、このような衝突の警告は 抑制させるべきです。 そのために、%expect宣言を使います。

次のように宣言します。

     %expect n

ここで、nは10進の整数です。 この宣言によって、n個のシフト還元衝突があって、 還元/還元衝突がなければ、警告が表示されません。 シフト還元衝突の数がnでなかったり、 1つでも還元/還元衝突があった場合は、通常の警告が表示されます。

一般に、次のような手順で%expectを使います。

すると、Bisonはチェックした衝突について文句をいわなくなりますが、 文法ファイルを書き換えて衝突の数が変わると、 再び警告を表示します。