diff options
Diffstat (limited to 'src/parser_bison.y')
-rw-r--r-- | src/parser_bison.y | 15 |
1 files changed, 14 insertions, 1 deletions
diff --git a/src/parser_bison.y b/src/parser_bison.y index ad2951a1..6c7a036a 100644 --- a/src/parser_bison.y +++ b/src/parser_bison.y @@ -209,7 +209,8 @@ static void location_update(struct location *loc, struct location *rhs, int n) %token <val> NUM "number" %token <string> STRING "string" %token <string> QUOTED_STRING -%destructor { xfree($$); } STRING QUOTED_STRING +%token <string> ERROR "error" +%destructor { xfree($$); } STRING QUOTED_STRING ERROR %token LL_HDR "ll" %token NETWORK_HDR "nh" @@ -465,6 +466,8 @@ static void location_update(struct location *loc, struct location *rhs, int n) %destructor { expr_free($$); } list_expr %type <expr> concat_expr map_lhs_expr %destructor { expr_free($$); } concat_expr map_lhs_expr +%type <expr> error_expr +%destructor { expr_free($$); } error_expr %type <expr> map_expr %destructor { expr_free($$); } map_expr @@ -1668,6 +1671,16 @@ expr : concat_expr | set_expr | map_expr | multiton_expr + | error_expr + ; + +error_expr : ERROR + { + $$ = NULL; + erec_queue(error(&@1, "bad value '%s'", $1), + state->msgs); + YYERROR; + } ; set_expr : '{' set_list_expr '}' |