Я пишу SQL-компилятор в бизоне и затрудняюсь интерпретировать производство бизонов государственного аппарата. Ниже приведены два состояния, каждый из которых вызывает ошибку 1 reduce/reduce
.Bison: уменьшить/уменьшить конфликт
Я предполагаю, что not_qm
является причиной этих reduce/recude
«S в like_cond
и in_cond
(см код ниже).
Я надеюсь, что кто-то может указать мне в правильном направлении. Пожалуйста, дайте мне знать, если вам нужна дополнительная информация.
like_cond : scalar_exp not_qm LIKE scalar_exp escape_scalar_exp_qm
;
in_cond : row_constructor not_qm IN LPAREN table_exp RPAREN
| scalar_exp not_qm IN LPAREN scalar_exp_list RPAREN
;
not_qm : /* empty */
| NOT
;
### EDITTED SECTION
row_constructor : scalar_exp
| LPAREN scalar_exp_list RPAREN
;
scalar_exp : un_op_qm scalar_primary
| scalar_exp bin_op scalar_primary
;
###
State 193
35 like_cond: scalar_exp . not_qm LIKE scalar_exp escape_scalar_exp_qm
37 in_cond: scalar_exp . not_qm IN LPAREN scalar_exp_list RPAREN
75 row_constructor: scalar_exp .
78 scalar_exp: scalar_exp . bin_op scalar_primary
STAR shift, and go to state 59
NOT shift, and go to state 218
PLUS shift, and go to state 60
MINUS shift, and go to state 61
DIV shift, and go to state 62
CONCAT shift, and go to state 63
NOT [reduce using rule 75 (row_constructor)]
LIKE reduce using rule 148 (not_qm)
IN reduce using rule 75 (row_constructor)
IN [reduce using rule 148 (not_qm)]
$default reduce using rule 75 (row_constructor)
bin_op go to state 64
not_qm go to state 228
State 211
35 like_cond: scalar_exp . not_qm LIKE scalar_exp escape_scalar_exp_qm
37 in_cond: scalar_exp . not_qm IN LPAREN scalar_exp_list RPAREN
75 row_constructor: scalar_exp .
78 scalar_exp: scalar_exp . bin_op scalar_primary
123 scalar_exp_list: scalar_exp . scalar_exp_list_star
STAR shift, and go to state 59
NOT shift, and go to state 218
PLUS shift, and go to state 60
MINUS shift, and go to state 61
DIV shift, and go to state 62
CONCAT shift, and go to state 63
COMMA shift, and go to state 109
RPAREN reduce using rule 124 (scalar_exp_list_star)
NOT [reduce using rule 75 (row_constructor)]
LIKE reduce using rule 148 (not_qm)
IN reduce using rule 75 (row_constructor)
IN [reduce using rule 148 (not_qm)]
$default reduce using rule 75 (row_constructor)
bin_op go to state 64
scalar_exp_list_star go to state 110
not_qm go to state 228
Не могли бы вы показать правила, которые вы используете для 'scalar_exp' и' row_constructor'? – kraskevich
Я добавил их в мой пост – Wouter