12055087d6ae5404572ce2e54066aae4b8c2cec2
[liboconfig.git] / src / scanner.l
1 %{
2 #include <stdlib.h>
3 #include "oconfig.h"
4 #include "aux_types.h"
5 #include "parser.h"
6 %}
7 WHITE_SPACE [\ \t\b]
8 ALNUM [A-Za-z0-9_]
9 QUOTED_STRING \"([^\"]+|\\.)*\"
10 UNQUOTED_STRING {ALNUM}+
11 HEX_NUMBER 0[xX][0-9a-fA-F]+
12 OCT_NUMBER 0[0-7]+
13 DEC_NUMBER [\+\-]?[0-9]+
14 FLOAT_NUMBER [\+\-]?[0-9]*\.[0-9]+([eE][\+\-][0-9]+)?
15 NUMBER ({FLOAT_NUMBER}|{HEX_NUMBER}|{OCT_NUMBER}|{DEC_NUMBER})
16 BOOL_TRUE (true|yes|on)
17 BOOL_FALSE (false|no|off)
18 COMMENT #.*
19
20 %%
21 {WHITE_SPACE}   |
22 {COMMENT}       {/* nothing */}
23
24 \n                      {return (EOL);}
25 "/"                     {return (SLASH);}
26 "<"                     {return (OPENBRAC);}
27 ">"                     {return (CLOSEBRAC);}
28 {NUMBER}                {yylval.number = strtod (yytext, NULL); return (NUMBER);}
29 {BOOL_TRUE}             {yylval.boolean = 1; return (TRUE);}
30 {BOOL_FALSE}            {yylval.boolean = 0; return (FALSE);}
31
32 {QUOTED_STRING}         {yylval.string = yytext; return (QUOTED_STRING);}
33 {UNQUOTED_STRING}       {yylval.string = yytext; return (UNQUOTED_STRING);}
34
35 %%