diff options
Diffstat (limited to 'mmss/config.l')
-rw-r--r-- | mmss/config.l | 170 |
1 files changed, 0 insertions, 170 deletions
diff --git a/mmss/config.l b/mmss/config.l deleted file mode 100644 index d81ba20..0000000 --- a/mmss/config.l +++ /dev/null @@ -1,170 +0,0 @@ -/* - Copyright (c) 2013, Matthias Schiffer <mschiffer@universe-factory.net> - All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE - FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - - -%option prefix="mmss_config_yy" -%option noyywrap -%option nounput -%option noinput -%option bison-bridge -%option bison-locations -%option reentrant -%option warn - - -%top { - #include <config.yy.hpp> - - #include <cassert> - #include <cstdio> -} - -%{ - /* register is deprecated in C++11 */ - #define register - - #pragma GCC diagnostic ignored "-Wunused-parameter" -%} - -%s NEEDSPACE -%s STRING -%s COMMENT - -%% -%{ - #define UPDATE_LOCATION do { \ - yylloc->first_line = yylloc->last_line; \ - yylloc->first_column = yylloc->last_column+1; \ - yylloc->last_column += yyleng; \ - } while (0) - - #define TOKEN(tok) do { UPDATE_LOCATION; BEGIN(NEEDSPACE); return tok; } while (0) -%} - -<INITIAL>{ -[0-9]+ { UPDATE_LOCATION; yylval->num = std::atoi(yytext); BEGIN(NEEDSPACE); return TOK_INTEGER; } -[0-9]*\.[0-9]+ { UPDATE_LOCATION; yylval->fnum = float(std::atof(yytext)); BEGIN(NEEDSPACE); return TOK_FLOAT; } - -yes { TOKEN(TOK_YES); } -no { TOKEN(TOK_NO); } -network { TOKEN(TOK_NETWORK); } -protocol { TOKEN(TOK_PROTOCOL); } -node { TOKEN(TOK_NODE); } -load { TOKEN(TOK_LOAD); } -default { TOKEN(TOK_DEFAULT); } -interface { TOKEN(TOK_INTERFACE); } -address { TOKEN(TOK_ADDRESS); } -etx { TOKEN(TOK_ETX); } -const { TOKEN(TOK_CONST); } -min { TOKEN(TOK_MIN); } -max { TOKEN(TOK_MAX); } -sine { TOKEN(TOK_SINE); } -period { TOKEN(TOK_PERIOD); } -phase { TOKEN(TOK_PHASE); } - -([[:xdigit:]]{2}:){7}[[:xdigit:]]{2} { - UPDATE_LOCATION; - - assert(std::sscanf(yytext, "%hhx:%hhx:%hhx:%hhx:%hhx:%hhx:%hhx:%hhx", - &yylval->addr.d[0], &yylval->addr.d[1], &yylval->addr.d[2], &yylval->addr.d[3], - &yylval->addr.d[4], &yylval->addr.d[5], &yylval->addr.d[6], &yylval->addr.d[7]) == 8); - - return TOK_GMRF_ADDRESS; -} - -[;:\{\}] { UPDATE_LOCATION; return yytext[0]; } - -[ \t] { yylloc->last_column++; } -\n { yylloc->last_column = 0; yylloc->last_line++; } -\r ; -} - -<INITIAL,NEEDSPACE>{ -s { TOKEN(TOK_S); } -m { TOKEN(TOK_M); } -h { TOKEN(TOK_H); } -days { TOKEN(TOK_DAYS); } -} - -<NEEDSPACE>{ -[;:\{\}] { UPDATE_LOCATION; BEGIN(INITIAL); return yytext[0]; } - -[ \t] { yylloc->last_column++; BEGIN(INITIAL); } -\n { yylloc->last_column = 0; yylloc->last_line++; BEGIN(INITIAL); } -\r ; -} - -<INITIAL>\" { UPDATE_LOCATION; BEGIN(STRING); } -<STRING>[^"\\\n\r] { yylloc->last_column++; yymore(); } -<STRING>\n { yylloc->last_line++; yylloc->last_column = 0; yymore(); } -<STRING>\r { yymore(); } -<STRING>\\. { yylloc->last_column+=2; yymore(); } -<STRING>\\\n { yylloc->last_line++; yylloc->last_column = 0; yymore(); } -<STRING>\" { - size_t i, esc = 0; - - for (i = 0; i < yyleng; i++) { - if (yytext[i] == '\\') { - i++; - if (yytext[i] == '\n') { - esc+=2; - } - else { - yytext[i-esc-1] = yytext[i]; - esc++; - } - } - else if(esc) { - yytext[i-esc] = yytext[i]; - } - } - yytext[yyleng-esc-1] = 0; - yylval->str = strdup(yytext); - BEGIN(NEEDSPACE); - yylloc->last_column++; - return TOK_STRING; - - } - -<INITIAL,NEEDSPACE>#.* { yylloc->last_column += yyleng; } -<INITIAL,NEEDSPACE>\/\/.* { yylloc->last_column += yyleng; } - -<INITIAL,NEEDSPACE>\/\* { UPDATE_LOCATION; BEGIN(COMMENT); } -<COMMENT>\*\/ { yylloc->last_column += yyleng; BEGIN(INITIAL); } -<COMMENT>[^\n\r] { yylloc->last_column++; } -<COMMENT>\n { yylloc->last_line++; yylloc->last_column = 0; } -<COMMENT>\r {} - -. { - yylloc->first_line = yylloc->last_line; - yylloc->first_column = yylloc->last_column+1; - yylval->error = "syntax error"; - return -1; - } - -<INITIAL><<EOF>> { return 0; } -<COMMENT><<EOF>> { yylval->error = "unterminated block comment"; return -1; } -<STRING><<EOF>> { yylval->error = "unterminated string"; return -1; } -%% |