Итак, я нахожусь в процессе создания компилятора для C-- и в настоящее время я создаю таблицы литералов, переменных и функций.
И это правило дает мне конфликт уменьшения / уменьшения:
lval: ID { check_var(); }
| ID { check_var(); } LBRACK NUM RBRACK
| ID { check_var(); } LBRACK ID { check_var(); } RBRACK;
Ошибка следующая:
parser.y: warning: 1 reduce/reduce conflict [-Wconflicts-rr]
parser.y:104.6-21: warning: rule useless in parser due to conflicts [-Wother]
| ID { check_var(); } LBRACK ID { check_var(); } RBRACK;
^^^^^^^^^^^^^^^^
У меня есть правила приоритета, чтобы избежать ошибок на токенах, но теперь он указывает на не токен, так что не знаете, что мне делать?
Если это случайно поможет, вот мои правила приоритета:
%token INPUT OUTPUT WRITE
%token RETURN VOID IF ELSE WHILE ASSIGN SEMI COMMA
%token LPAREN RPAREN LBRACE RBRACE LBRACK RBRACK
%token NUM ID STRING INT
%left EQ NEQ GE LE GT LT
%left PLUS MINUS
%left TIMES OVER