Add a small Hello World program to be assembled
[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  * SPDX-License-Identifier: AGPL-3.0-or-later
20  */
21
22 %{
23
24 #include <stdlib.h>
25 #include "element.h"
26 #include "parser.h"
27
28 static char *stripquotes(const char *string);
29
30 %}
31
32 %option noyywrap
33 %option case-insensitive
34
35 atomchar [^\x00-\x20,#';%()\[\]\{\}<>"\\.]
36
37 %%
38
39 ;                                       { return SEMICOLON; }
40 \<                                      { return LEFT_CHEVRON; }
41 \>                                      { return RIGHT_CHEVRON; }
42 \(                                      { return LEFT_PARENTHESIS; }
43 \)                                      { return RIGHT_PARENTHESIS; }
44 ,                                       { return COMMA; }
45 \*[0-7]+\*                              { yylval.number = strtol(&yytext[1], NULL, 8); return NUMBER; }
46 [-+]?[0-9]*\.?[0-9]+([eE][-+]?[0-9]+)?  { yylval.number = strtod(yytext, NULL); return NUMBER; }
47 {atomchar}({atomchar}|\.)*              { yylval.string = strdup(yytext); return ATOM; }
48 \"[^"]*\"                               { yylval.string = stripquotes(yytext); return STRING; }
49 [ \r\n\t\f]+                            { /* whitespace */ }
50
51 %%
52
53 static char *stripquotes(const char *string)
54 {
55     return strndup(&string[1], strlen(string) - 2);
56 }