%}
IDENT [_[:alpha:]][_[:alnum:]]*
+INTEGER 0x[[:xdigit:]]+|0[0-7]+|[[:digit:]]+
%%
"union" return T_UNION;
"enum" return T_ENUM;
+{INTEGER} {
+ char *end;
+
+ errno = 0;
+ yylval->uintval = strtoumax(yytext, &end, 0);
+ if (errno == ERANGE)
+ lex_error("integer constant out of range");
+ if (*end)
+ lex_error("invalid integer constant");
+
+ return T_UINT;
+}
+
{IDENT} {
yylval->strval = malloc(yyleng+1);
if (!yylval->strval)