Бизон /Yacc уменьшите уменьшить конфликт для конкретного примера грамматики

У меня есть проект парсера для моего класса компиляторов. Я не смог разрешить конфликт уменьшить / уменьшить для одного из правил.

Графическое представление этого правила грамматики доступно по этой ссылке (извините, я не могу опубликовать изображение здесь из-за политик stackru):

Графическое представление правила грамматики type

Где все овалы являются терминальными символами.

Поскольку это правило выглядит немного сложным, я попытался разбить его на более мелкие части. Вот моя попытка построить грамматику:

type    :   id_or_int   brackets_or_end
        ;
id_or_int   :   IDnum
        |   INTnum
        ;
brackets_or_end :   brackets    remainingpartboe
        |
        ;
brackets    :   LBRACnum    RBRACnum    brackets
        |
        ;
remainingpartboe:   DOTnum      type
        |
        ;   

Обратите внимание, что терминалы - это слова, оканчивающиеся на суффикс num, например, DOTnum. Остальные нетерминалы.

Бизон сообщает о следующем конфликте

mj-parser.y: conflicts: 1 reduce/reduce
mj-parser.y:122.18: warning: rule useless in parser due to conflicts: 
brackets_or_end: /* empty */

Обратите внимание, что вышеприведенная ошибка бизона относится ко второму варианту создания правила brackets_or_end.

Пожалуйста, помогите в разрешении этого конфликта, предложив другой способ написания грамматики. Кстати, я посмотрел на подробный вывод Bison, но это не сильно помогло.

Спасибо -sas

1 ответ

(Ответ в ответе на вопрос. Преобразован в вики-ответ сообщества. См. Вопрос без ответов, но проблема решена в комментариях (или расширена в чате))

@BobDalgleish написал:

Обратите внимание, что у вас есть два нетерминала, которые могут быть пустыми в одном и том же производственном дереве. Таким образом, пустая строка может быть уменьшена до скобок или brackets_or_end. Это не сработает.

ОП написал:

Ты абсолютно прав, Боб. Спасибо за подсказку: скобки не должны иметь эпсилон-сокращения. Это удалит конфликт уменьшения-уменьшения.

Другие вопросы по тегам