From f2be3352d0658d429733b8d5adbc3c5e7b50089a Mon Sep 17 00:00:00 2001 From: Sebastian Harl Date: Mon, 16 Jun 2014 08:35:19 +0200 Subject: [PATCH] grammar: Simplified compare matcher parser. --- src/frontend/grammar.y | 37 ++++++++++++------------------------- 1 file changed, 12 insertions(+), 25 deletions(-) diff --git a/src/frontend/grammar.y b/src/frontend/grammar.y index abab594..75885c5 100644 --- a/src/frontend/grammar.y +++ b/src/frontend/grammar.y @@ -66,6 +66,7 @@ sdb_fe_yyerror(YYLTYPE *lval, sdb_fe_yyscan_t scanner, const char *msg); %name-prefix "sdb_fe_yy" %union { + const char *sstr; /* static string */ char *str; sdb_llist_t *list; @@ -104,6 +105,8 @@ sdb_fe_yyerror(YYLTYPE *lval, sdb_fe_yyscan_t scanner, const char *msg); %type matcher compare_matcher +%type op + %destructor { free($$); } %destructor { sdb_object_deref(SDB_OBJ($$)); } @@ -287,39 +290,23 @@ matcher: * Parse matchers comparing object attributes with a value. */ compare_matcher: - IDENTIFIER '.' IDENTIFIER CMP_EQUAL STRING + IDENTIFIER '.' IDENTIFIER op STRING { - $$ = sdb_store_matcher_parse_cmp($1, $3, "=", $5); - /* TODO: simplify memory management in the parser */ + $$ = sdb_store_matcher_parse_cmp($1, $3, $4, $5); free($1); $1 = NULL; free($3); $3 = NULL; free($5); $5 = NULL; } + ; + +op: + CMP_EQUAL { $$ = "="; } | - IDENTIFIER '.' IDENTIFIER CMP_NEQUAL STRING - { - $$ = sdb_store_matcher_parse_cmp($1, $3, "!=", $5); - /* TODO: simplify memory management in the parser */ - free($1); $1 = NULL; - free($3); $3 = NULL; - free($5); $5 = NULL; - } + CMP_NEQUAL { $$ = "!="; } | - IDENTIFIER '.' IDENTIFIER CMP_REGEX STRING - { - $$ = sdb_store_matcher_parse_cmp($1, $3, "=~", $5); - free($1); $1 = NULL; - free($3); $3 = NULL; - free($5); $5 = NULL; - } + CMP_REGEX { $$ = "=~"; } | - IDENTIFIER '.' IDENTIFIER CMP_NREGEX STRING - { - $$ = sdb_store_matcher_parse_cmp($1, $3, "!~", $5); - free($1); $1 = NULL; - free($3); $3 = NULL; - free($5); $5 = NULL; - } + CMP_NREGEX { $$ = "!~"; } ; %% -- 2.30.2