1

C 言語のサブセットの文法を作成しようとしています。私のルールのいくつかには、次のものがあります(pNodeで定義されたポインタunionです):

rule : { $<pNode>$ = $<pNode>0; } the rest

ただし、バイソンのドキュメントを読んだ後、スタック内の前のシンボル$<pNode>0を既に参照しているため、アクションを省略できるようです。私は正しいですか?

アクションを省略できれば素晴らしいと思います。そうしないと表示されないシフト/リデュースの競合が発生するからです。

4

1 に答える 1

1

このコードは、値スタックの一番上の値を複製する ($1このルールの複製を作成する) ため、不要である可能性があります -- 複製された値のいずれかを使用するすべてのコードを、代わりに複製されていない値を使用するように変更できる場合、また、どのコードもスタック上の値を変更しようとしない場合 (可能ですが、まれであり、非常に貧弱なスタイルと見なされます)。

問題は、アクションに発生する可能性がありますthe rest-- 彼らが言及している場合$0$-1問題が発生している可能性があります。彼らが参照するだけで$0(そしてそれを変更しないで)、おそらくアクションを削除しても問題ありません。

于 2013-05-14T22:21:15.590 に答える