Предупреждение бизона: пустое правило для типизированного нетерминала

Я получаю предупреждение, которого я не совсем понимаю от Бизона.

warning: empty rule for typed non-terminal, and no action

это для каждого из моих нетерминальных персонажей. Часть, которую я не понимаю, состоит в том, что, если я не даю им тип, то я получаю ошибки компиляции, утверждающие, что все $ ns не определены. Вот раздел грамматики моего бизона.

%union {
char *sval;
}

%token <sval> PLUS TIMES LPAREN RPAREN ID
%type  <sval> s e t f
%%

s : e                   { cout << GetNonConstCharStar(std::string("(e ") + $1 + ")") << endl; }

e :
| e PLUS t          { $$ = GetNonConstCharStar(std::string("(e ") + $1 + ")" + " (PLUS " + $2 + ") " + "(t " + $3 + ")" ); }
| t                 { $$ = GetNonConstCharStar(std::string("(t ") + $1 + ")"); }
;
t :
| t TIMES f         { $$ = GetNonConstCharStar(std::string("(t ") + $1 + ")" + " (TIMES " + $2 + ") " + "(f " + $3 + ")"); }
| f                 { $$ = GetNonConstCharStar(std::string("(f ") + $1 + ")"); }
;

f :
| LPAREN e RPAREN   { $$ = GetNonConstCharStar(std::string("(LPAREN \\")+ $1 + ") (e " + $2 + ") (RPAREN \\" + $3 + ")") ; }
| ID                { $$ = GetNonConstCharStar(std::string("(ID ") + $1 + ")") ; }
;

%%

0

Решение

e :
| e PLUS t
| t

Является e: | e PLUS t | t, то есть, ничего такого или же e PLUS t или же t, Удалить первый |,

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]