From 64ea3288233b3701f60d1e54550f1a654159fdbc Mon Sep 17 00:00:00 2001 From: Stephen Williams Date: Thu, 1 Mar 2012 18:48:16 -0800 Subject: [PATCH] Parse dynamic array declarations. --- parse.y | 84 ++++++++++++++++++++++++++++++++++----------------------- 1 file changed, 50 insertions(+), 34 deletions(-) diff --git a/parse.y b/parse.y index 15b6685c8..02a458b28 100644 --- a/parse.y +++ b/parse.y @@ -982,6 +982,56 @@ loop_statement /* IEEE1800-2005: A.6.8 */ } ; + +/* TODO: Replace register_variable_list with list_of_variable_decl_assignments. */ +list_of_variable_decl_assignments /* IEEE1800-2005 A.2.3 */ + : variable_decl_assignment + { list*tmp = new list; + tmp->push_back($1); + $$ = tmp; + } + | list_of_variable_decl_assignments ',' variable_decl_assignment + { list*tmp = $1; + tmp->push_back($3); + $$ = tmp; + } + ; + +variable_decl_assignment /* IEEE1800-2005 A.2.3 */ + : IDENTIFIER dimensions_opt + { decl_assignment_t*tmp = new decl_assignment_t; + tmp->name = lex_strings.make($1); + if ($2) { + tmp->index = *$2; + delete $2; + } + delete[]$1; + $$ = tmp; + } + | IDENTIFIER '=' expression + { decl_assignment_t*tmp = new decl_assignment_t; + tmp->name = lex_strings.make($1); + tmp->expr .reset($3); + delete[]$1; + $$ = tmp; + } + | IDENTIFIER '[' ']' + { decl_assignment_t*tmp = new decl_assignment_t; + tmp->name = lex_strings.make($1); + yyerror("sorry: Dynamic arrays not yet supported here."); + delete[]$1; + $$ = tmp; + } + | IDENTIFIER '[' '$' ']' + { decl_assignment_t*tmp = new decl_assignment_t; + tmp->name = lex_strings.make($1); + yyerror("sorry: Queue dimensions not yet supported here."); + delete[]$1; + $$ = tmp; + } + ; + + loop_variables /* IEEE1800-2005: A.6.8 */ : loop_variables ',' IDENTIFIER { list*tmp = $1; @@ -4703,40 +4753,6 @@ register_variable_list } ; -/* TODO: Replace register_variable_list with list_of_variable_decl_assignments. */ -list_of_variable_decl_assignments - : variable_decl_assignment - { list*tmp = new list; - tmp->push_back($1); - $$ = tmp; - } - | list_of_variable_decl_assignments ',' variable_decl_assignment - { list*tmp = $1; - tmp->push_back($3); - $$ = tmp; - } - ; - -variable_decl_assignment - : IDENTIFIER dimensions_opt - { decl_assignment_t*tmp = new decl_assignment_t; - tmp->name = lex_strings.make($1); - if ($2) { - tmp->index = *$2; - delete $2; - } - delete[]$1; - $$ = tmp; - } - | IDENTIFIER '=' expression - { decl_assignment_t*tmp = new decl_assignment_t; - tmp->name = lex_strings.make($1); - tmp->expr .reset($3); - delete[]$1; - $$ = tmp; - } - ; - net_variable : IDENTIFIER dimensions_opt { perm_string name = lex_strings.make($1);