diff options
Diffstat (limited to 'tools/d2c/args/grammar.y')
-rw-r--r-- | tools/d2c/args/grammar.y | 18 |
1 files changed, 14 insertions, 4 deletions
diff --git a/tools/d2c/args/grammar.y b/tools/d2c/args/grammar.y index 6477c47..f44a94b 100644 --- a/tools/d2c/args/grammar.y +++ b/tools/d2c/args/grammar.y @@ -50,18 +50,19 @@ YY_DECL; %token FORCE_EXPR FORCE_CALL ALLOW_ALL %token NAME -%token NUMBER BINVAL HEXVAL +%token NUMBER BINVAL HEXVAL STRING %token COMMA COLON OP CP -%token NOT AND_LOG EOR +%token NOT AND_LOG EOR EQ NE +%token AND_BOOL OR_BOOL %type <string> NAME %type <integer> NUMBER -%type <string> BINVAL HEXVAL +%type <string> BINVAL HEXVAL STRING %type <operand> call %type <args> arg_list -%type <arg> arg_expr arg_composed +%type <arg> arg_expr arg_logical_expr arg_composed %type <un_op> arg_expr_un_op %type <bin_op> arg_expr_bin_op %type <string> arg_field @@ -84,9 +85,13 @@ arg_expr : NAME { $$ = build_arg_expr_from_n | NUMBER { $$ = build_arg_expr_from_number($1); } | BINVAL { $$ = build_arg_expr_from_binval($1); } | HEXVAL { $$ = build_arg_expr_from_hexval($1); } + | STRING { $$ = build_arg_expr_from_string($1); } + | arg_logical_expr { $$ = $1; } | arg_composed { $$ = $1; } | OP arg_expr CP { $$ = $2; } | arg_expr_un_op arg_expr { $$ = build_unary_arg_expr($2, $1); } + | arg_expr EQ arg_expr { $$ = build_conditional_arg_expr($1, $3, true); } + | arg_expr NE arg_expr { $$ = build_conditional_arg_expr($1, $3, false); } | arg_expr arg_expr_bin_op arg_expr { $$ = build_binary_arg_expr($1, $3, $2); } arg_expr_un_op : NOT { $$ = CUO_NOT; } @@ -94,6 +99,11 @@ arg_expr_un_op : NOT { $$ = CUO_NOT; } arg_expr_bin_op : AND_LOG { $$ = CBO_AND; } | EOR { $$ = CBO_EOR; } +arg_logical_expr : arg_expr AND_BOOL arg_expr { $$ = build_logical_arg_expr($1, $3, true); } + | arg_logical_expr AND_BOOL arg_expr { $$ = build_logical_arg_expr($1, $3, true); } + | arg_expr OR_BOOL arg_expr { $$ = build_logical_arg_expr($1, $3, false); } + | arg_logical_expr OR_BOOL arg_expr { $$ = build_logical_arg_expr($1, $3, false); } + arg_composed : arg_field COLON arg_field { $$ = build_composed_arg_expr($1, $3); } | arg_composed COLON arg_field { $$ = extend_composed_arg_expr($1, $3); } |