yaccに苦戦

Scriptive-C*1の文法をBNFで書くが、どうしてもyaccが『シフト・還元が衝突』やら『無意味な非終端記号が云々』などとうるさい。いろいろいじっているうち原因が判明

/* defvar=変数宣言 */
defvar_list: defvar_list defvar ;
defvar: deftype varlist ';' ;

こんなの通るわけないよな*2。これ見つけるのに1.5時間かかった。でもおかげでbisonの-vオプションで出力されるX.output見てエラー箇所の見当が付くようになった気がする。

*1:id:kt-blackout:20040706参照

*2:だって、これを受理するためには無限の変数宣言が必要になるから