Я выполнил тесты для своей собственной реализации, и из моих тестов ответ Марцина правильный. Если я определю приоритет как:
%left OR
%left AND
Тогда выражение A & B | C & D будет уменьшено до ((A & B) | (C & D))
Если я определю приоритет как:
%left AND
%left OR
Тогда выражение A & B | C & D будет уменьшено до ((A & (B | C)) & D)
Одно дифференцирующее выражение будет:
true & true | true & false
В предыдущем определении приоритета это было бы истинным, а в последнем - ложным. Я протестировал оба сценария, и оба они работают как объяснено.
Дважды проверьте свои тесты, чтобы убедиться. Также обратите внимание, что это порядок определений% left,% right и т. Д. В части заголовка, которые определяют приоритет, а не порядок, который вы сами определяете свои правила. Если он все еще не работает, возможно, это какая-то другая область в вашем коде, которая испортила его, или, может быть, ваша версия бизона отличается (я просто стреляю в темноте).