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/>
26 static char *stripquotes(const char *string);
31 %option case-insensitive
33 atomchar [^\x00-\x20,#';%()\[\]\{\}<>"\\.]
37 ; { return SEMICOLON; }
38 \< { return LEFT_CHEVRON; }
39 \> { return RIGHT_CHEVRON; }
40 \( { return LEFT_PARENTHESIS; }
41 \) { return RIGHT_PARENTHESIS; }
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 */ }
51 static char *stripquotes(const char *string)
53 return strndup(&string[1], strlen(string) - 2);