私はYACCを学び、それが私に与えている警告メッセージを理解するのに少し苦労しています。ここに私のファイルの一部です:YACCの規則が減っていない
define_character: WORD IS STRING COLOR
{
printf("%s's full name is %s and thier color is %s", $1, $3, $4);
};
dialog: WORD COLON STRING
{
printf("%s says %s", $1, $3);
};
change_scene: SCENE SETSCENE WORD
{
printf("%s is the new scene", $3);
};
それは私を与えることを警告は、次のとおりです。
2 rules never reduced
2 useless nonterminals and 2 useless rules
warning: useless nonterminal: dialog
warning: useless nonterminal: change_scene
warning: useless rule: dialog: WORD SEMICOLON STRING
warning: useless rule: change_scene: SCENE SETSCENE WORD
私はこれらをどのように修正すればよいですか?私は検索を試みましたが、シフト/競合のためにエラーが発生した人が見つかりました。 YACCは通常、警告出力に警告を出力するようですが、change_sceneからWORDを削除しようとしましたが、他のものと同じトークンを探していないことを確認しています。 。私はすべてのルールをテストすることができます。なぜなら、どちらが上にあっても動作するものがあるからです。残りの部分で問題を引き起こしている最初のルールの最後にいくつかの構文がありませんか?
ありがとうございます、私はそれが今修正されていると思います。私が見たすべての例は、実際には複数のアクションを処理する方法を示していませんでした。私はO'Reillyの本を持っており、私がパーサーを構築するのを試みています。私はさらに読むべきだと思います。私は視覚小説のための通訳を作っています。 |で区切られたコマンドのリストを先頭にコマンド文を置くことで修正しました。 – John