123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657 |
- /*
- * scanner.l
- *
- * Copyright (C) 2015 Alexander Andrejevic <theflash AT sdf DOT lonestar DOT org>
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License as
- * published by the Free Software Foundation, either version 3 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Affero General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>
- *
- * SPDX-License-Identifier: AGPL-3.0-or-later
- */
- %{
- #include <stdlib.h>
- #include "element.h"
- #include "parser.h"
- static char *stripquotes(const char *string);
- %}
- %option noyywrap
- %option case-insensitive
- atomchar [^\x00-\x20,#';%()\[\]\{\}<>"\\.]
- %%
- ; { return SEMICOLON; }
- \< { return LEFT_CHEVRON; }
- \> { return RIGHT_CHEVRON; }
- \( { return LEFT_PARENTHESIS; }
- \) { return RIGHT_PARENTHESIS; }
- , { return COMMA; }
- \*[0-7]+\* { yylval.number = strtol(&yytext[1], NULL, 8); return NUMBER; }
- [-+]?[0-9]*\.?[0-9]+([eE][-+]?[0-9]+)? { yylval.number = strtod(yytext, NULL); return NUMBER; }
- {atomchar}({atomchar}|\.)* { yylval.string = strdup(yytext); return ATOM; }
- \"[^"]*\" { yylval.string = stripquotes(yytext); return STRING; }
- [ \r\n\t\f]+ { /* whitespace */ }
- %%
- static char *stripquotes(const char *string)
- {
- return strndup(&string[1], strlen(string) - 2);
- }
|