From aca67c1a541d033a152ff93f59185be224ec8942 Mon Sep 17 00:00:00 2001 From: Josh Holtrop Date: Sat, 19 May 2018 21:31:23 -0400 Subject: [PATCH] Create some list nodes --- src/parser/parser.yc | 110 ++++++++++++++++++++++++++++++++++--------- 1 file changed, 88 insertions(+), 22 deletions(-) diff --git a/src/parser/parser.yc b/src/parser/parser.yc index 9e546b6..c3503b3 100644 --- a/src/parser/parser.yc +++ b/src/parser/parser.yc @@ -384,8 +384,14 @@ struct_or_union ; struct_declaration_list - : struct_declaration - | struct_declaration_list struct_declaration + : struct_declaration { + $$ = new Node(NODE_TYPE_LIST); + $$->list->push_back($1); + } + | struct_declaration_list struct_declaration { + $$ = $1; + $$->list->push_back($2); + } ; struct_declaration @@ -394,15 +400,33 @@ struct_declaration ; specifier_qualifier_list - : type_specifier specifier_qualifier_list - | type_specifier - | type_qualifier specifier_qualifier_list - | type_qualifier + : type_specifier specifier_qualifier_list { + $$ = $2; + $$->list->push_back($1); + } + | type_specifier { + $$ = new Node(NODE_TYPE_LIST); + $$->list->push_back($1); + } + | type_qualifier specifier_qualifier_list { + $$ = $2; + $$->list->push_back($1); + } + | type_qualifier { + $$ = new Node(NODE_TYPE_LIST); + $$->list->push_back($1); + } ; struct_declarator_list - : struct_declarator - | struct_declarator_list COMMA struct_declarator + : struct_declarator { + $$ = new Node(NODE_TYPE_LIST); + $$->list->push_back($1); + } + | struct_declarator_list COMMA struct_declarator { + $$ = $1; + $$->list->push_back($3); + } ; struct_declarator @@ -418,8 +442,14 @@ enum_specifier ; enumerator_list - : enumerator - | enumerator_list COMMA enumerator + : enumerator { + $$ = new Node(NODE_TYPE_LIST); + $$->list->push_back($1); + } + | enumerator_list COMMA enumerator { + $$ = $1; + $$->list->push_back($3); + } ; enumerator @@ -460,8 +490,14 @@ pointer ; type_qualifier_list - : type_qualifier - | type_qualifier_list type_qualifier + : type_qualifier { + $$ = new Node(NODE_TYPE_LIST); + $$->list->push_back($1); + } + | type_qualifier_list type_qualifier { + $$ = $2; + $$->list->push_back($1); + } ; parameter_type_list @@ -470,8 +506,14 @@ parameter_type_list ; parameter_list - : parameter_declaration - | parameter_list COMMA parameter_declaration + : parameter_declaration { + $$ = new Node(NODE_TYPE_LIST); + $$->list->push_back($1); + } + | parameter_list COMMA parameter_declaration { + $$ = $1; + $$->list->push_back($3); + } ; parameter_declaration @@ -481,8 +523,14 @@ parameter_declaration ; identifier_list - : IDENTIFIER - | identifier_list COMMA IDENTIFIER + : IDENTIFIER { + $$ = new Node(NODE_TYPE_LIST); + $$->list->push_back($1); + } + | identifier_list COMMA IDENTIFIER { + $$ = $1; + $$->list->push_back($3); + } ; type_name @@ -513,8 +561,14 @@ initializer ; initializer_list - : initializer - | initializer_list COMMA initializer + : initializer { + $$ = new Node(NODE_TYPE_LIST); + $$->list->push_back($1); + } + | initializer_list COMMA initializer { + $$ = $1; + $$->list->push_back($3); + } ; statement @@ -541,13 +595,25 @@ compound_statement ; declaration_list - : declaration - | declaration_list declaration + : declaration { + $$ = new Node(NODE_TYPE_LIST); + $$->list->push_back($1); + } + | declaration_list declaration { + $$ = $1; + $$->list->push_back($2); + } ; statement_list - : statement - | statement_list statement + : statement { + $$ = new Node(NODE_TYPE_LIST); + $$->list->push_back($1); + } + | statement_list statement { + $$ = $1; + $$->list->push_back($2); + } ; expression_statement