From: Michael Tremer Date: Sat, 1 Jun 2019 03:14:11 +0000 (+0100) Subject: libpakfire: parser: Drastically simplify the grammar X-Git-Tag: 0.9.28~1285^2~1004 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=1ee96e0e40f565bc92bee61762fc224747c981e4;p=pakfire.git libpakfire: parser: Drastically simplify the grammar When opening a block, we jump straight to the top again Signed-off-by: Michael Tremer --- diff --git a/src/libpakfire/parser/grammar.y b/src/libpakfire/parser/grammar.y index ab4465793..f7022b904 100644 --- a/src/libpakfire/parser/grammar.y +++ b/src/libpakfire/parser/grammar.y @@ -84,10 +84,8 @@ static PakfireParser make_if_stmt(PakfireParser parser, const enum operator op, %type top; %type item; -%type assignment; +%type statement; %type block; -%type block_assignments; -%type block_assignment; %type if_stmt; %precedence T_WORD @@ -112,7 +110,8 @@ top : top item } ; -item : assignment +item : statement + | if_stmt | block | empty { $$ = NULL; @@ -165,22 +164,29 @@ text : text line | line ; -end : T_END T_EOL; +if : T_IF; else : T_ELSE T_EOL; -if_stmt : T_IF T_WORD T_EQUALS T_WORD T_EOL block_assignments else block_assignments end +end : T_END T_EOL; + +if_stmt : if variable T_EQUALS variable T_EOL top else top end { $$ = make_if_stmt(parser, OP_EQUALS, $2, $4, $6, $8); //pakfire_parser_unref($6); //pakfire_parser_unref($8); } - | T_IF T_WORD T_EQUALS T_WORD T_EOL block_assignments end + | if variable T_EQUALS variable T_EOL top end { $$ = make_if_stmt(parser, OP_EQUALS, $2, $4, $6, NULL); //pakfire_parser_unref($6); }; +block : block_opening top block_closing + { + $$ = $2; + }; + block_opening : variable T_EOL { // Create a new sub-parser which opens a new namespace @@ -193,26 +199,7 @@ block_closing : end parser = pakfire_parser_get_parent(parser); }; -block : block_opening block_assignments block_closing - { - $$ = $2; - }; - -block_assignments : block_assignments block_assignment - { - $$ = merge_parsers($1, $2); - } - | block_assignment; - -block_assignment : assignment - | block - | if_stmt - | empty - { - $$ = NULL; - }; - -assignment : variable T_ASSIGN value T_EOL +statement : variable T_ASSIGN value T_EOL { // Allocate a new parser $$ = new_parser(parser, NULL);