From 92035fb38ef8e7ac6319af659f7d682a047d2f70 Mon Sep 17 00:00:00 2001 From: Clifford Wolf Date: Wed, 20 Nov 2013 13:05:27 +0100 Subject: Implemented indexed part selects --- frontends/verilog/lexer.l | 3 +++ frontends/verilog/parser.y | 11 +++++++++++ 2 files changed, 14 insertions(+) (limited to 'frontends/verilog') diff --git a/frontends/verilog/lexer.l b/frontends/verilog/lexer.l index fea383cf..353f0a79 100644 --- a/frontends/verilog/lexer.l +++ b/frontends/verilog/lexer.l @@ -249,6 +249,9 @@ supply1 { return TOK_SUPPLY1; } "<<<" { return OP_SSHL; } ">>>" { return OP_SSHR; } +"+:" { return TOK_POS_INDEXED; } +"-:" { return TOK_NEG_INDEXED; } + "/*" { BEGIN(COMMENT); } . /* ignore comment body */ \n /* ignore comment body */ diff --git a/frontends/verilog/parser.y b/frontends/verilog/parser.y index c4f386ce..5dbf0490 100644 --- a/frontends/verilog/parser.y +++ b/frontends/verilog/parser.y @@ -104,6 +104,7 @@ static void free_attr(std::map *al) %token TOK_GENERATE TOK_ENDGENERATE TOK_GENVAR %token TOK_SYNOPSYS_FULL_CASE TOK_SYNOPSYS_PARALLEL_CASE %token TOK_SUPPLY0 TOK_SUPPLY1 TOK_TO_SIGNED TOK_TO_UNSIGNED +%token TOK_POS_INDEXED TOK_NEG_INDEXED %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 @@ -336,6 +337,16 @@ non_opt_range: $$->children.push_back($2); $$->children.push_back($4); } | + '[' expr TOK_POS_INDEXED expr ']' { + $$ = new AstNode(AST_RANGE); + $$->children.push_back(new AstNode(AST_SUB, new AstNode(AST_ADD, $2->clone(), $4), AstNode::mkconst_int(1, true))); + $$->children.push_back(new AstNode(AST_ADD, $2, AstNode::mkconst_int(0, true))); + } | + '[' expr TOK_NEG_INDEXED expr ']' { + $$ = new AstNode(AST_RANGE); + $$->children.push_back(new AstNode(AST_ADD, $2, AstNode::mkconst_int(0, true))); + $$->children.push_back(new AstNode(AST_SUB, new AstNode(AST_ADD, $2->clone(), AstNode::mkconst_int(1, true)), $4)); + } | '[' expr ']' { $$ = new AstNode(AST_RANGE); $$->children.push_back($2); -- cgit v1.2.1