6 # error This scanner must be made using flex, not lex.
9 #include "iwhd-qparser.h"
11 #define YY_DECL extern int yylex (YYSTYPE *yylval_param, yyscan_t yyscanner)
14 %option warn nounput noinput noyywrap
15 %option bison-bridge reentrant
19 \"[^"]*\" { yytext[yyleng-1] = 0; yytext++;
20 yylval_param->str = strdup(yytext);
21 return yylval_param->str ? T_STRING : T_INVALID; }
22 ~[^~]*~ { yylval_param->str = strdup(yytext);
23 return yylval_param->str ? T_DATE : T_INVALID; }
24 [0-9]+ { yylval_param->str = strdup(yytext);
25 return yylval_param->str ? T_NUMBER : T_INVALID; }
26 [a-z_]+ { yylval_param->str = strdup(yytext);
27 return yylval_param->str ? T_ID : T_INVALID; }
28 [$#().] { return yytext[0]; }
39 . { return T_INVALID; }
41 <<EOF>> { yyterminate (); /* aka return 0; */ }
46 #if defined(UNIT_TEST)
48 yyerror (const char *msg)
50 printf("%s: %s\n",__func__,msg);
54 main (int argc, char **argv)
57 yylex_init (&scanner);
59 = yy_scan_string ("\"!@#\" ~xxx~ 123 abc $#()<>=!&|.", scanner);
63 int t = yylex(&v, scanner);
76 printf("%d %s\n",t,yytext);
81 printf("INVALID %c\n",yytext[0]);
88 yy_delete_buffer (buf, scanner);
89 yylex_destroy (scanner);