From 59a5b833216b62f28c816df7c9129bf0954993e0 Mon Sep 17 00:00:00 2001 From: Matthias Schiffer Date: Sun, 25 Mar 2012 14:21:47 +0200 Subject: Change parse to push API, fix some parser bugs --- src/config.l | 45 ++++++++++++++++++++++++++------------------- 1 file changed, 26 insertions(+), 19 deletions(-) (limited to 'src/config.l') diff --git a/src/config.l b/src/config.l index 1173d44..54d3447 100644 --- a/src/config.l +++ b/src/config.l @@ -1,4 +1,4 @@ -%option prefix="fastd_config_" +%option prefix="fastd_config_yy" %option noyywrap %option bison-bridge %option reentrant @@ -7,10 +7,11 @@ #include } -%x STRING -%x ADDR6 +%s STRING +%s ADDR6 %% +{ [0-9]+ { yylval->num = atoi(yytext); return TOK_INTEGER; } interface { yylval->str = yytext; return TOK_INTERFACE; } @@ -26,7 +27,7 @@ key { yylval->str = yytext; return TOK_KEY; } [0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3} { if (!inet_pton(AF_INET, yytext, &yylval->addr)) { yylval->str = "invalid address"; - return TOK_ERROR; + return -1; } return TOK_ADDR; @@ -38,27 +39,33 @@ tun { yylval->str = yytext; return TOK_TUN; } [A-Za-z_][A-Za-z0-9_]* { yylval->str = yytext; return TOK_IDENTIFIER; } -[;:\{\}] { return *yytext; } +[;:\{\}] { return yytext[0]; } [ \t\n] ; +} -\" BEGIN(STRING); +\"\" { yylval->str = ""; return TOK_STRING; } +\" BEGIN(STRING); [^"]* { yylval->str = yytext; return TOK_STRING; } \" BEGIN(INITIAL); -\[ BEGIN(ADDR6); -[^\]]+ { - if (!inet_pton(AF_INET6, yytext, &yylval->addr6)) { - yylval->str = "invalid address"; - return TOK_ERROR; - } - - return TOK_ADDR6; +\[ BEGIN(ADDR6); +[^\]]+ { + if (!inet_pton(AF_INET6, yytext, &yylval->addr6)) { + yylval->str = "invalid address"; + return -1; } -\] BEGIN(INITIAL); -. { - yylval->str = "invalid character"; - return TOK_ERROR; - } + return TOK_ADDR6; + } +\] BEGIN(INITIAL); + +. { + yylval->str = "invalid character"; + return -1; + } + +<> { return 0; } +<> { yylval->str = "unterminated string"; return -1; } +<> { yylval->str = "unterminated address"; return -1; } %% -- cgit v1.2.3