%}
[ \t]+ LOC_STEP /* ignore whitespace */;
-{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;}
+{WORD} {yylval->string = XSTRDUP(MTYPE_LEX, yytext); return WORD;}
+{IPV4} {yylval->string = XSTRDUP(MTYPE_LEX, yytext); return IPV4;}
+{IPV4_PREFIX} {yylval->string = XSTRDUP(MTYPE_LEX, yytext); return IPV4_PREFIX;}
+{IPV6} {yylval->string = XSTRDUP(MTYPE_LEX, yytext); return IPV6;}
+{IPV6_PREFIX} {yylval->string = XSTRDUP(MTYPE_LEX, yytext); return IPV6_PREFIX;}
+{VARIABLE} {yylval->string = XSTRDUP(MTYPE_LEX, yytext); return VARIABLE;}
+{RANGE} {yylval->string = XSTRDUP(MTYPE_LEX, yytext); return RANGE;}
. {return yytext[0];}
%%
%code requires {
#include "stdlib.h"
#include "string.h"
+ #include "memory.h"
#include "command.h"
#include "log.h"
#include "graph.h"
+ DECLARE_MTYPE(LEX)
+
#define YYSTYPE CMD_YYSTYPE
#define YYLTYPE CMD_YYLTYPE
struct parser_ctx;
literal_token: WORD
{
$$ = new_token_node (ctx, WORD_TKN, $1, doc_next(ctx));
- free ($1);
+ XFREE (MTYPE_LEX, $1);
}
;
IPV4
{
$$ = new_token_node (ctx, IPV4_TKN, $1, doc_next(ctx));
- free ($1);
+ XFREE (MTYPE_LEX, $1);
}
| IPV4_PREFIX
{
$$ = new_token_node (ctx, IPV4_PREFIX_TKN, $1, doc_next(ctx));
- free ($1);
+ XFREE (MTYPE_LEX, $1);
}
| IPV6
{
$$ = new_token_node (ctx, IPV6_TKN, $1, doc_next(ctx));
- free ($1);
+ XFREE (MTYPE_LEX, $1);
}
| IPV6_PREFIX
{
$$ = new_token_node (ctx, IPV6_PREFIX_TKN, $1, doc_next(ctx));
- free ($1);
+ XFREE (MTYPE_LEX, $1);
}
| VARIABLE
{
$$ = new_token_node (ctx, VARIABLE_TKN, $1, doc_next(ctx));
- free ($1);
+ XFREE (MTYPE_LEX, $1);
}
| RANGE
{
// validate range
if (token->min > token->max) cmd_yyerror (&@1, ctx, "Invalid range.");
- free ($1);
+ XFREE (MTYPE_LEX, $1);
}
/* <selector|set> productions */
#undef scanner
+DEFINE_MTYPE(LIB, LEX, "Lexer token (temporary)")
+
void
command_parse_format (struct graph *graph, struct cmd_element *cmd)
{