У меня есть ситуация, когда есть правило с конфликтом сдвига / уменьшения, которое я понимаю. Я хочу, чтобы правило никогда не сокращалось до последнего возможного момента (конца строки). Так что я хотел бы сказать всегда сдвиг. Как мне это сделать?

1
user34537 5 Дек 2009 в 10:07

2 ответа

Лучший ответ

Как отмечает Крейг, когда возникает конфликт уменьшения сдвига, бизон делает сдвиг. Если предупреждение об этом вас беспокоит, вы можете использовать директиву bison% expect, чтобы указать ожидаемое количество конфликтов сдвиг-уменьшение. Таким образом, он будет молчать, если это единственный конфликт, но если есть дополнительные конфликты, предупреждение вернется.

2
Chris Dodd 8 Дек 2009 в 01:26
Я предпочитаю альтернативу, но этот ответ избавляет от сообщений. Я хотел бы переписать раздел, чтобы он знал, что нужно сдвигать, а не уменьшать, но я не могу понять, как я могу это сделать. (может, банкомат не стоит. Посмотрю, когда дойду до конца). Кстати, упоминание% expect-rr для сокрытия конфликтов уменьшения / уменьшения
 – 
user34537
8 Дек 2009 в 11:28

По умолчанию Bison будет сдвигаться при конфликте сдвига / уменьшения. Вы можете использовать объявления приоритета, чтобы изменить поведение.

0
Craig 5 Дек 2009 в 10:50
Я слышал это раньше, но мне все еще не нравится видеть предупреждение или ошибку о сдвиге / уменьшении или уменьшении / уменьшении. Банкомат отключен, потому что его синтаксический сахар.
 – 
user34537
5 Дек 2009 в 11:50