私は言語仕様を読んでいて、それ用のパーサーを書こうとしています。仕様では、同じものに対して複数の名前が使用されている場合があります。これを次のように Happy 文法にコピーしようとしました。
foo : ...whatever...
bar : foo { $1 }
baz : foo { $1 }
残念ながら、これにより Happy はひっくり返り、「競合の削減/削減」について愚痴をこぼし始めます。基本的に、問題は、 a を見たときに、それを aまたは afoo
に減らすかどうかわからないことのようです。真実はもちろん、それらはすべて同一であるため、私は気にしません。しかし、それはまだハッピーを動揺させます—それは言語的に皮肉なことですが、他に何もありません.bar
baz
bar
(また、 を言及するルールと を言及する別baz
のルールがある場合、「間違った」リダクションが選択された場合、正しいルールが実行されない可能性があることも少し怖いです。つまり、パーサーには 100% の問題が発生します。デバッグすることは不可能です。)
Happyに「私が何を言おうと、私が言っbar
たふりをfoo
して、あなたの人生を続けてください」と伝える方法はありますか?
明らかに、外部ツールを使用してテキストの検索と置換を行うこともできますが、ビルドステップをさらに追加する必要はありません...