Правила 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 обычно добавляет это в вывод предупреждения, если там есть любые, но просто чтобы убедиться, что я попытался удалить WORD из change_scene, чтобы он не искал какие-либо из тех же токенов, что и другие, и он все еще не уменьшается. Я могу протестировать все правила, потому что какой из них верхний - тот, который работает. Мне не хватает синтаксиса в конце первого правила, которое вызывает проблемы с остальными?

5
задан John 27 July 2011 в 07:22
поделиться