Add -Wall -Werror to AM_INIT_AUTOMAKE
[zilutils.git] / zilc / scanner.l
1 /*
2  * scanner.l
3  *
4  * Copyright (C) 2015 Alexander Andrejevic <theflash AT sdf DOT lonestar DOT org>
5  *
6  * This program is free software: you can redistribute it and/or modify
7  * it under the terms of the GNU Affero General Public License as
8  * published by the Free Software Foundation, either version 3 of the
9  * License, or (at your option) any later version.
10  *
11  * This program is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14  * GNU Affero General Public License for more details.
15  *
16  * You should have received a copy of the GNU Affero General Public License
17  * along with this program.  If not, see <http://www.gnu.org/licenses/>
18  */
19
20 %{
21
22 #include <stdlib.h>
23 #include "element.h"
24 #include "parser.h"
25
26 static char *stripquotes(const char *string);
27
28 %}
29
30 %option noyywrap
31 %option case-insensitive
32
33 atomchar [^\x00-\x20,#';%()\[\]\{\}<>"\\.]
34
35 %%
36
37 ;                                       { return SEMICOLON; }
38 \<                                      { return LEFT_CHEVRON; }
39 \>                                      { return RIGHT_CHEVRON; }
40 \(                                      { return LEFT_PARENTHESIS; }
41 \)                                      { return RIGHT_PARENTHESIS; }
42 ,                                       { return COMMA; }
43 \*[0-7]+\*                              { yylval.number = strtol(&yytext[1], NULL, 8); return NUMBER; }
44 [-+]?[0-9]*\.?[0-9]+([eE][-+]?[0-9]+)?  { yylval.number = strtod(yytext, NULL); return NUMBER; }
45 {atomchar}({atomchar}|\.)*              { yylval.string = strdup(yytext); return ATOM; }
46 \"[^"]*\"                               { yylval.string = stripquotes(yytext); return STRING; }
47 [ \r\n\t\f]+                            { /* whitespace */ }
48
49 %%
50
51 static char *stripquotes(const char *string)
52 {
53     return strndup(&string[1], strlen(string) - 2);
54 }