Конфликт означает, что грамматика, которую вы дали зубру, не является LALR (1), поэтому он не может решить, какое действие предпринять в каждом возможном случае, чтобы правильно проанализировать грамматику.
В вашемВ этом случае проблема в том, что ваша грамматика неоднозначна.Если вы дадите ему ввод типа
NUMBER AND NUMBER AND NUMBER
, он не сможет решить, должен ли он анализировать его как эквивалент
( NUMBER AND NUMBER ) AND NUMBER
или
NUMBER AND ( NUMBER AND NUMBER )
.Вы можете решить эту проблему несколькими способами:
вы можете использовать %left AND
или %right AND
, чтобы сказать зубру, что он должен обрабатывать AND
как левый или право-ассоциативный инфиксоператор
вы можете изменить правило search_condition
, чтобы сделать его однозначным:
search_condition : search_condition AND primary
| primary
;
primary : '( search_condition ')'
| predicate
;