4 * Copyright (C) 2015 Alexander Andrejevic <theflash AT sdf DOT lonestar DOT org>
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.
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.
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/>
19 * SPDX-License-Identifier: AGPL-3.0-or-later
28 static char *stripquotes(const char *string);
33 %option case-insensitive
35 atomchar [^\x00-\x20,#';%()\[\]\{\}<>"\\.]
39 ; { return SEMICOLON; }
40 \< { return LEFT_CHEVRON; }
41 \> { return RIGHT_CHEVRON; }
42 \( { return LEFT_PARENTHESIS; }
43 \) { return RIGHT_PARENTHESIS; }
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 */ }
53 static char *stripquotes(const char *string)
55 return strndup(&string[1], strlen(string) - 2);