Added SystemVerilog support for ++ and --
authorClifford Wolf <clifford@clifford.at>
Thu, 23 Feb 2017 10:21:33 +0000 (11:21 +0100)
committerClifford Wolf <clifford@clifford.at>
Thu, 23 Feb 2017 10:21:33 +0000 (11:21 +0100)
frontends/verilog/verilog_lexer.l
frontends/verilog/verilog_parser.y

index ff2fa5753024e7fb5e73dc602285ee8d8719c802..ed33af7bae98cf29988135936051d7d35dc1a9a3 100644 (file)
@@ -366,7 +366,9 @@ import[ \t\r\n]+\"(DPI|DPI-C)\"[ \t\r\n]+function[ \t\r\n]+ {
 "<<<" { return OP_SSHL; }
 ">>>" { return OP_SSHR; }
 
-"::"  { SV_KEYWORD(TOK_PACKAGESEP); }
+"::"  { return TOK_PACKAGESEP; }
+"++"  { return TOK_INCREMENT; }
+"--"  { return TOK_DECREMENT; }
 
 "+:" { return TOK_POS_INDEXED; }
 "-:" { return TOK_NEG_INDEXED; }
index 1879ff441233ebbb36f97a225ebefc1067a29ef0..7c2880e4ebc022f9d9569bc04496896ee8d21370 100644 (file)
@@ -117,6 +117,7 @@ static void free_attr(std::map<std::string, AstNode*> *al)
 %token TOK_POS_INDEXED TOK_NEG_INDEXED TOK_ASSERT TOK_ASSUME
 %token TOK_RESTRICT TOK_COVER TOK_PROPERTY TOK_ENUM TOK_TYPEDEF
 %token TOK_RAND TOK_CONST TOK_CHECKER TOK_ENDCHECKER
+%token TOK_INCREMENT TOK_DECREMENT
 
 %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
@@ -1067,6 +1068,14 @@ simple_behavioral_stmt:
                AstNode *node = new AstNode(AST_ASSIGN_EQ, $1, $4);
                ast_stack.back()->children.push_back(node);
        } |
+       lvalue TOK_INCREMENT {
+               AstNode *node = new AstNode(AST_ASSIGN_EQ, $1, new AstNode(AST_ADD, $1->clone(), AstNode::mkconst_int(1, true)));
+               ast_stack.back()->children.push_back(node);
+       } |
+       lvalue TOK_DECREMENT {
+               AstNode *node = new AstNode(AST_ASSIGN_EQ, $1, new AstNode(AST_SUB, $1->clone(), AstNode::mkconst_int(1, true)));
+               ast_stack.back()->children.push_back(node);
+       } |
        lvalue OP_LE delay expr {
                AstNode *node = new AstNode(AST_ASSIGN_LE, $1, $4);
                ast_stack.back()->children.push_back(node);