2016-08-08 23:11:14 +02:00
|
|
|
/*
|
|
|
|
* Command format string lexer for CLI backend.
|
|
|
|
*
|
|
|
|
* --
|
|
|
|
* Copyright (C) 2015 Cumulus Networks, Inc.
|
|
|
|
*
|
|
|
|
* This file is part of GNU Zebra.
|
|
|
|
*
|
|
|
|
* GNU Zebra is free software; you can redistribute it and/or modify it
|
|
|
|
* under the terms of the GNU General Public License as published by the
|
|
|
|
* Free Software Foundation; either version 2, or (at your option) any
|
|
|
|
* later version.
|
|
|
|
*
|
|
|
|
* GNU Zebra 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
|
|
|
|
* General Public License for more details.
|
|
|
|
*
|
|
|
|
* You should have received a copy of the GNU General Public License
|
|
|
|
* along with GNU Zebra; see the file COPYING. If not, write to the Free
|
|
|
|
* Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
|
|
|
|
* 02111-1307, USA.
|
|
|
|
*/
|
|
|
|
|
2016-07-06 19:16:55 +02:00
|
|
|
%{
|
2016-07-11 21:56:07 +02:00
|
|
|
#include "command_parse.h"
|
2016-07-06 19:16:55 +02:00
|
|
|
|
2016-08-09 19:37:01 +02:00
|
|
|
extern void set_lexer_string (const char *);
|
|
|
|
extern void cleanup_lexer (void);
|
|
|
|
YY_BUFFER_STATE buffer;
|
2016-07-06 19:16:55 +02:00
|
|
|
%}
|
|
|
|
|
2016-10-20 21:21:37 +02:00
|
|
|
WORD (\-|\+)?[a-z\*][-+_a-zA-Z0-9\*]*
|
2016-07-06 19:16:55 +02:00
|
|
|
IPV4 A\.B\.C\.D
|
|
|
|
IPV4_PREFIX A\.B\.C\.D\/M
|
|
|
|
IPV6 X:X::X:X
|
|
|
|
IPV6_PREFIX X:X::X:X\/M
|
2016-08-01 19:03:39 +02:00
|
|
|
VARIABLE [A-Z][-_a-zA-Z:0-9]+
|
2016-08-04 20:16:26 +02:00
|
|
|
NUMBER (\-|\+)?[0-9]{1,20}
|
2016-08-04 18:39:15 +02:00
|
|
|
RANGE \({NUMBER}[ ]?\-[ ]?{NUMBER}\)
|
2016-07-06 19:16:55 +02:00
|
|
|
|
|
|
|
/* yytext shall be a pointer */
|
|
|
|
%pointer
|
|
|
|
%option noyywrap
|
2016-07-11 21:56:07 +02:00
|
|
|
%option nounput
|
|
|
|
%option noinput
|
|
|
|
%option outfile="command_lex.c"
|
2016-07-06 19:16:55 +02:00
|
|
|
|
|
|
|
%%
|
|
|
|
[ /t] /* ignore whitespace */;
|
2016-07-29 17:54:03 +02:00
|
|
|
{WORD} {yylval.string = XSTRDUP(MTYPE_TMP, yytext); return WORD;}
|
|
|
|
{IPV4} {yylval.string = XSTRDUP(MTYPE_TMP, yytext); return IPV4;}
|
|
|
|
{IPV4_PREFIX} {yylval.string = XSTRDUP(MTYPE_TMP, yytext); return IPV4_PREFIX;}
|
|
|
|
{IPV6} {yylval.string = XSTRDUP(MTYPE_TMP, yytext); return IPV6;}
|
|
|
|
{IPV6_PREFIX} {yylval.string = XSTRDUP(MTYPE_TMP, yytext); return IPV6_PREFIX;}
|
|
|
|
{VARIABLE} {yylval.string = XSTRDUP(MTYPE_TMP, yytext); return VARIABLE;}
|
|
|
|
{RANGE} {yylval.string = XSTRDUP(MTYPE_TMP, yytext); return RANGE;}
|
2016-07-06 19:16:55 +02:00
|
|
|
. {return yytext[0];}
|
|
|
|
%%
|
2016-07-11 21:56:07 +02:00
|
|
|
|
|
|
|
void
|
2016-08-09 19:37:01 +02:00
|
|
|
set_lexer_string (const char *string)
|
2016-07-11 21:56:07 +02:00
|
|
|
{
|
2016-08-09 23:02:11 +02:00
|
|
|
buffer = yy_scan_string (string);
|
2016-08-09 19:37:01 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
void
|
|
|
|
cleanup_lexer ()
|
|
|
|
{
|
|
|
|
yy_delete_buffer (buffer);
|
2016-07-11 21:56:07 +02:00
|
|
|
}
|