Używanie pierwszeństwa w Bison dla unary minus nie rozwiązuje konfliktu przesunięcia / zmniejszenia

Opracowuję bardzo prostą gramatykę, w której używam unarnego argumentu minus. Jednak mam konflikt / redukcję konfliktu. W podręczniku Bison i wszędzie, gdzie szukam, mówi się, że powinienem zdefiniować nowy token i nadać mu wyższy priorytet niż binarny argument minus, a następnie użyć „% prec TOKEN” w regule.

Zrobiłem to, ale nadal otrzymuję ostrzeżenie. Czemu?

Używam bizona (GNU Bison) 2.4.1. Gramatyka jest pokazana poniżej:

%{
#include <string>
extern "C" int yylex(void);
%}

%union {
    std::string token;
}

%token <token> T_IDENTIFIER T_NUMBER
%token T_EQUAL T_LPAREN T_RPAREN

%right T_EQUAL
%left T_PLUS T_MINUS
%left T_MUL T_DIV
%left UNARY

%start program

%%

program : statements expr
;

statements : '\n'
           | statements line
;

line : assignment
     | expr
;

assignment : T_IDENTIFIER T_EQUAL expr
;

expr : T_NUMBER
     | T_IDENTIFIER
     | expr T_PLUS expr
     | expr T_MINUS expr
     | expr T_MUL expr
     | expr T_DIV expr
     | T_MINUS expr   %prec UNARY
     | T_LPAREN expr T_RPAREN
;

questionAnswers(2)

yourAnswerToTheQuestion