diff options
author | Clifford Wolf <clifford@clifford.at> | 2014-08-06 15:43:46 +0200 |
---|---|---|
committer | Clifford Wolf <clifford@clifford.at> | 2014-08-06 15:52:54 +0200 |
commit | d259abbda2b9d568228dc8d0bed2d0b0d88d7b4f (patch) | |
tree | 86c90432e4453f030be99a5e30a4c9d10ef53d62 /frontends/verilog | |
parent | b4f10e342cf400bd2f392a588f28de069ba0f9d8 (diff) | |
download | yosys-d259abbda2b9d568228dc8d0bed2d0b0d88d7b4f.tar.gz yosys-d259abbda2b9d568228dc8d0bed2d0b0d88d7b4f.tar.bz2 yosys-d259abbda2b9d568228dc8d0bed2d0b0d88d7b4f.zip |
Added AST_MULTIRANGE (arrays with more than 1 dimension)
Diffstat (limited to 'frontends/verilog')
-rw-r--r-- | frontends/verilog/parser.y | 22 |
1 files changed, 18 insertions, 4 deletions
diff --git a/frontends/verilog/parser.y b/frontends/verilog/parser.y index 26e2ddc34..95d7f3935 100644 --- a/frontends/verilog/parser.y +++ b/frontends/verilog/parser.y @@ -112,7 +112,8 @@ static void free_attr(std::map<std::string, AstNode*> *al) %token TOK_SUPPLY0 TOK_SUPPLY1 TOK_TO_SIGNED TOK_TO_UNSIGNED %token TOK_POS_INDEXED TOK_NEG_INDEXED TOK_ASSERT TOK_PROPERTY -%type <ast> wire_type range non_opt_range range_or_signed_int expr basic_expr concat_list rvalue lvalue lvalue_concat_list +%type <ast> range range_or_multirange non_opt_range non_opt_multirange range_or_signed_int +%type <ast> wire_type expr basic_expr concat_list rvalue lvalue lvalue_concat_list %type <string> opt_label tok_prim_wrapper hierarchical_id %type <boolean> opt_signed %type <al> attr @@ -361,6 +362,15 @@ non_opt_range: $$->children.push_back($2); }; +non_opt_multirange: + non_opt_range non_opt_range { + $$ = new AstNode(AST_MULTIRANGE, $1, $2); + } | + non_opt_multirange non_opt_range { + $$ = $1; + $$->children.push_back($2); + }; + range: non_opt_range { $$ = $1; @@ -369,6 +379,10 @@ range: $$ = NULL; }; +range_or_multirange: + range { $$ = $1; } | + non_opt_multirange { $$ = $1; }; + range_or_signed_int: range { $$ = $1; @@ -566,7 +580,7 @@ wire_name_and_opt_assign: }; wire_name: - TOK_ID range { + TOK_ID range_or_multirange { AstNode *node = astbuf1->clone(); node->str = *$1; append_attr_clone(node, albuf); @@ -1007,8 +1021,8 @@ rvalue: $$->str = *$1; delete $1; } | - hierarchical_id non_opt_range non_opt_range { - $$ = new AstNode(AST_IDENTIFIER, $2, $3); + hierarchical_id non_opt_multirange { + $$ = new AstNode(AST_IDENTIFIER, $2); $$->str = *$1; delete $1; }; |