Проблемы с анализатором, поиск конца параметра, сдвиг / уменьшение возникающих конфликтов

Я пытаюсь настроить свой парсер, чтобы найти конец определенного параметра, распознав, что запятой нет, поэтому я в основном настроил его, чтобы найти такой параметр, как этот

параметр: конец_параметра запятая

(Этот тип данных является просто списком, поэтому нет ничего, что указывало бы, что он заканчивается - просто он останавливается, когда нет элементов, разделяющих запятую)

И end_parameter определен ниже и делает то, что должен. Синтаксический анализатор работает с другими типами данных, распознавая правую фигурную скобку в качестве конца, но я получаю ошибки сдвига / уменьшения, когда я настраиваю тип, заканчивающийся отсутствием запятой. У кого-нибудь есть предложения?

1 ответ

Вы узнаете вещи, написав правила, которые соответствуют тому, чем они являются, а не тем, чем они не являются. Таким образом, для списка параметров, разделенных запятыми без запятой в конце, вы должны использовать:

parameter_list : parameter
               | parameter_list ',' parameter
               ;

Теперь, в зависимости от контекста, в котором вы используете это, и от того, какие другие правила используются в том же контексте, вы можете получить конфликты. Если это так, вам нужно взглянуть на файл y.output, чтобы увидеть, откуда возникают конфликты, чтобы их разрешить.

Вы редко получаете конфликты из одного правила - конфликты обычно возникают из-за взаимодействия нескольких правил.

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