WHITE_SPACE [\ \t\b] ALNUM [A-Za-z0-9_] QUOTED_STRING \"([^\"]+|\\.)*\" UNQUOTED_STRING {ALNUM}+ HEX_NUMBER 0[xX][0-9a-fA-F]+ OCT_NUMBER 0[0-7]+ DEC_NUMBER [\+\-]?[0-9]+ FLOAT_NUMBER [\+\-]?[0-9]*\.[0-9]+([eE][\+\-][0-9]+)? NUMBER ({FLOAT_NUMBER}|{HEX_NUMBER}|{OCT_NUMBER}|{DEC_NUMBER}) BOOL_TRUE (true|yes|on) BOOL_FALSE (false|no|off) COMMENT #.* %% {WHITE_SPACE} | {COMMENT} {/* nothing */} \n {return (EOL);} "/" {return (SLASH);} "<" {return (OPENBRAC);} ">" {return (CLOSEBRAC);} {NUMBER} {yylval.number = strtod (yytext, NULL); return (NUMBER);} {BOOL_TRUE} {yylval.boolean = 1; return (TRUE);} {BOOL_FALSE} {yylval.boolean = 0; return (FALSE);} {QUOTED_STRING} {yylval.string = strdup (yytext); return (QUOTED_STRING);} {UNQUOTED_STRING} {yylval.string = strdup (yytext); return (UNQUOTED_STRING);} %% /* static char *unquote (const char *orig) { char *ret = strdup (orig); int len; int i; if (ret == NULL) return (NULL); len = strlen (ret); for (i = 0; i < len; i++) { if (ret[i] == '\\') { memmove (ret + i; ret + (i + 1); len - (i + 1)); len--; } } return (ret); } */