build: make the "rpm" rule work once again
[iwhd.git] / qlexer.l
blob976939bf93a477a992a599efe3f5b42f07132aa1
1 %{
2 #include <config.h>
3 #include <stdio.h>
5 #ifndef FLEX_SCANNER
6 # error This scanner must be made using flex, not lex.
7 #endif
9 #include "iwhd-qparser.h"
10 #undef YY_DECL
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]; }
29 [<]             { return T_LT; }
30 [<]=            { return T_LE; }
31 >               { return T_GT; }
32 >=              { return T_GE; }
33 ==              { return T_EQ; }
34 !=              { return T_NE; }
35 !               { return T_NOT; }
36 &&              { return T_AND; }
37 \|\|            { return T_OR; }
38 [ \t\n\r]+      { }
39 .               { return T_INVALID; }
41 <<EOF>>         { yyterminate (); /* aka return 0; */ }
46 #if defined(UNIT_TEST)
47 static void
48 yyerror (const char *msg)
50         printf("%s: %s\n",__func__,msg);
53 int
54 main (int argc, char **argv)
56         yyscan_t scanner;
57         yylex_init (&scanner);
58         YY_BUFFER_STATE buf
59           = yy_scan_string ("\"!@#\" ~xxx~ 123 abc $#()<>=!&|.", scanner);
61         while (1) {
62                 YYSTYPE v;
63                 int t = yylex(&v, scanner);
64                 if (t == 0)
65                         break;
67                 switch (t) {
68                 case T_STRING:
69                         if (!yytext[0]) {
70                                 printf("EOF\n");
71                                 break;
72                         }
73                 case T_DATE:
74                 case T_NUMBER:
75                 case T_ID:
76                         printf("%d %s\n",t,yytext);
77                         break;
78                 case T_SPACE:
79                         break;
80                 case T_INVALID:
81                         printf("INVALID %c\n",yytext[0]);
82                         break;
83                 default:
84                         printf("%d\n",t);
85                 }
86         }
88         yy_delete_buffer (buf, scanner);
89         yylex_destroy (scanner);
91         return 0;
93 #endif