我正在學習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