Initial commit.
[liboconfig.git] / src / parser.lex
1 WHITE_SPACE [\ \t\b]
2 ALNUM [A-Za-z0-9_]
3 QUOTED_STRING \"([^\"]+|\\.)*\"
4 UNQUOTED_STRING {ALNUM}+
5 HEX_NUMBER 0[xX][0-9a-fA-F]+
6 OCT_NUMBER 0[0-7]+
7 DEC_NUMBER [\+\-]?[0-9]+
8 FLOAT_NUMBER [\+\-]?[0-9]*\.[0-9]+([eE][\+\-][0-9]+)?
9 NUMBER ({FLOAT_NUMBER}|{HEX_NUMBER}|{OCT_NUMBER}|{DEC_NUMBER})
10 BOOL_TRUE (true|yes|on)
11 BOOL_FALSE (false|no|off)
12 COMMENT #.*
13
14 %%
15 {WHITE_SPACE}   |
16 {COMMENT}       {/* nothing */}
17
18 \n                      {return (EOL);}
19 "/"                     {return (SLASH);}
20 "<"                     {return (OPENBRAC);}
21 ">"                     {return (CLOSEBRAC);}
22 {NUMBER}                {yylval.number = strtod (yytext, NULL); return (NUMBER);}
23 {BOOL_TRUE}             {yylval.boolean = 1; return (TRUE);}
24 {BOOL_FALSE}            {yylval.boolean = 0; return (FALSE);}
25
26 {QUOTED_STRING}         {yylval.string = strdup (yytext); return (QUOTED_STRING);}
27 {UNQUOTED_STRING}       {yylval.string = strdup (yytext); return (UNQUOTED_STRING);}
28
29 %%
30 /*
31 static char *unquote (const char *orig)
32 {
33         char *ret = strdup (orig);
34         int len;
35         int i;
36
37         if (ret == NULL)
38                 return (NULL);
39
40         len = strlen (ret);
41         for (i = 0; i < len; i++)
42         {
43                 if (ret[i] == '\\')
44                 {
45                         memmove (ret + i; ret + (i + 1); len - (i + 1));
46                         len--;
47                 }
48         }
49
50         return (ret);
51 }
52 */