From 19dba2561ece488543e1728ba800386943abb77c Mon Sep 17 00:00:00 2001 From: Clifford Wolf Date: Wed, 20 Nov 2013 10:51:32 +0100 Subject: Implemented part/bit select on memory read --- frontends/verilog/parser.y | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) (limited to 'frontends/verilog/parser.y') diff --git a/frontends/verilog/parser.y b/frontends/verilog/parser.y index 24c84514..c4f386ce 100644 --- a/frontends/verilog/parser.y +++ b/frontends/verilog/parser.y @@ -105,7 +105,7 @@ static void free_attr(std::map *al) %token TOK_SYNOPSYS_FULL_CASE TOK_SYNOPSYS_PARALLEL_CASE %token TOK_SUPPLY0 TOK_SUPPLY1 TOK_TO_SIGNED TOK_TO_UNSIGNED -%type wire_type range expr basic_expr concat_list rvalue lvalue lvalue_concat_list +%type wire_type range non_opt_range expr basic_expr concat_list rvalue lvalue lvalue_concat_list %type opt_label tok_prim_wrapper hierarchical_id %type opt_signed %type attr @@ -330,7 +330,7 @@ wire_type_token: astbuf3->is_signed = true; }; -range: +non_opt_range: '[' expr ':' expr ']' { $$ = new AstNode(AST_RANGE); $$->children.push_back($2); @@ -339,6 +339,11 @@ range: '[' expr ']' { $$ = new AstNode(AST_RANGE); $$->children.push_back($2); + }; + +range: + non_opt_range { + $$ = $1; } | /* empty */ { $$ = NULL; @@ -893,6 +898,11 @@ rvalue: $$ = new AstNode(AST_IDENTIFIER, $2); $$->str = *$1; delete $1; + } | + hierarchical_id non_opt_range non_opt_range { + $$ = new AstNode(AST_IDENTIFIER, $2, $3); + $$->str = *$1; + delete $1; }; lvalue: -- cgit v1.2.3