Cómo resolver la advertencia de Bison "... no tiene tipo declarado"

Ejecutando Bison en este archivo:

<code>%{
    #include <iostream>
    int yylex();
    void yyerror(const char*);
%}


%union
{
    char    name[100];
    int     val;
}

%token NUM ID
%right '='
%left '+' '-'
%left '*'

%%

exp :   NUM     {$$.val = $1.val;}
    | ID        {$$.val = vars[$1.name];}
    | exp '+' exp   {$$.val = $1.val + $3.val;}
    | ID '=' exp    {$$.val = vars[$1.name] = $3.val;}
;

%%
</code>

Conduce a advertencias del tipo de:

advertencia: $ de 'exp' no tiene un tipo declarado.

¿Qué significa y cómo lo resuelvo?

Respuestas a la pregunta(2)

Su respuesta a la pregunta