%{
extern char *yylval;
char * strsave(char *s)
{
        char * p = calloc(strlen(s)+1, 1);
        if (p)
                return strcpy(p, s);
        fputs("no room\n", stderr), exit(1);
}

%}
integer [0-9]+
dreal ([0-9]*\.[0-9]+)
ereal ([0-9]*\.[0-9]+[eE][+-]?[0-9]+)
real  {dreal}|{ereal}
id [a-z]+
nl   \n

%%
[ \n\t]+    ;
{integer}  {yylval = strsave(yytext);
             return(NUMBER);}
{id}     { yylval = strsave(yytext);
             return(ID);}
.      {  return(yytext[0]);}
%%
