diff --git a/lib/config/config_parser.yy b/lib/config/config_parser.yy index 76d85d31d..fe3e01eda 100644 --- a/lib/config/config_parser.yy +++ b/lib/config/config_parser.yy @@ -172,6 +172,7 @@ static void MakeRBinaryOp(Value** result, AExpression::OpCallback& op, Value *le %type type %type partial_specifier %type rterm +%type rterm_array %type rterm_scope %type lterm %type object @@ -494,7 +495,11 @@ lbinary_op: T_SET } ; -lterm_items: lterm_items_inner +lterm_items: /* empty */ + { + $$ = new Array(); + } + | lterm_items_inner { $$ = $1; } @@ -503,11 +508,7 @@ lterm_items: lterm_items_inner $$ = $1; } -lterm_items_inner: /* empty */ - { - $$ = new Array(); - } - | lterm +lterm_items_inner: lterm { $$ = new Array(); $$->Add(*$1); @@ -614,37 +615,49 @@ lterm: identifier lbinary_op rterm } ; -rterm_items: rterm_items_inner +rterm_items: /* empty */ + { + $$ = new Array(); + } + | rterm_items_inner { $$ = $1; } - | rterm_items_inner ',' + | rterm_items_inner arraysep { $$ = $1; } ; -rterm_items_inner: /* empty */ - { - $$ = new Array(); - } - | rterm +rterm_items_inner: rterm { $$ = new Array(); $$->Add(*$1); delete $1; } - | rterm_items_inner ',' rterm + | rterm_items_inner arraysep rterm { $$ = $1; $$->Add(*$3); delete $3; } - | rterm_items_inner ',' newlines rterm + ; + +rterm_array: '[' newlines rterm_items newlines ']' { - $$ = $1; - $$->Add(*$4); - delete $4; + $$ = new Value(make_shared(&AExpression::OpArray, Array::Ptr($3), DebugInfoRange(@1, @5))); + } + | '[' newlines rterm_items ']' + { + $$ = new Value(make_shared(&AExpression::OpArray, Array::Ptr($3), DebugInfoRange(@1, @4))); + } + | '[' rterm_items newlines ']' + { + $$ = new Value(make_shared(&AExpression::OpArray, Array::Ptr($2), DebugInfoRange(@1, @4))); + } + | '[' rterm_items ']' + { + $$ = new Value(make_shared(&AExpression::OpArray, Array::Ptr($2), DebugInfoRange(@1, @3))); } ; @@ -712,21 +725,9 @@ rterm: T_STRING delete $1; delete $3; } - | '[' newlines rterm_items newlines ']' + | rterm_array { - $$ = new Value(make_shared(&AExpression::OpArray, Array::Ptr($3), DebugInfoRange(@1, @5))); - } - | '[' rterm_items newlines ']' - { - $$ = new Value(make_shared(&AExpression::OpArray, Array::Ptr($2), DebugInfoRange(@1, @4))); - } - | '[' newlines rterm_items ']' - { - $$ = new Value(make_shared(&AExpression::OpArray, Array::Ptr($3), DebugInfoRange(@1, @4))); - } - | '[' rterm_items ']' - { - $$ = new Value(make_shared(&AExpression::OpArray, Array::Ptr($2), DebugInfoRange(@1, @3))); + $$ = $1; } | rterm_scope { @@ -892,4 +893,8 @@ sep: ',' newlines | newlines ; +arraysep: ',' newlines + | ',' + ; + %%