mirror of https://github.com/YosysHQ/yosys.git
added while and repeat support to verilog parser
This commit is contained in:
parent
f9c1cd5edb
commit
b5cd7a0179
|
@ -137,6 +137,7 @@ std::string AST::type2str(AstNodeType type)
|
||||||
X(AST_DEFAULT)
|
X(AST_DEFAULT)
|
||||||
X(AST_FOR)
|
X(AST_FOR)
|
||||||
X(AST_WHILE)
|
X(AST_WHILE)
|
||||||
|
X(AST_REPEAT)
|
||||||
X(AST_GENVAR)
|
X(AST_GENVAR)
|
||||||
X(AST_GENFOR)
|
X(AST_GENFOR)
|
||||||
X(AST_GENIF)
|
X(AST_GENIF)
|
||||||
|
|
|
@ -117,6 +117,7 @@ namespace AST
|
||||||
AST_DEFAULT,
|
AST_DEFAULT,
|
||||||
AST_FOR,
|
AST_FOR,
|
||||||
AST_WHILE,
|
AST_WHILE,
|
||||||
|
AST_REPEAT,
|
||||||
|
|
||||||
AST_GENVAR,
|
AST_GENVAR,
|
||||||
AST_GENFOR,
|
AST_GENFOR,
|
||||||
|
|
|
@ -140,6 +140,8 @@ namespace VERILOG_FRONTEND {
|
||||||
"default" { return TOK_DEFAULT; }
|
"default" { return TOK_DEFAULT; }
|
||||||
"generate" { return TOK_GENERATE; }
|
"generate" { return TOK_GENERATE; }
|
||||||
"endgenerate" { return TOK_ENDGENERATE; }
|
"endgenerate" { return TOK_ENDGENERATE; }
|
||||||
|
"while" { return TOK_WHILE; }
|
||||||
|
"repeat" { return TOK_REPEAT; }
|
||||||
|
|
||||||
"assert"([ \t\r\n]+"property")? { return TOK_ASSERT; }
|
"assert"([ \t\r\n]+"property")? { return TOK_ASSERT; }
|
||||||
|
|
||||||
|
|
|
@ -98,7 +98,7 @@ static void free_attr(std::map<std::string, AstNode*> *al)
|
||||||
%token TOK_MODULE TOK_ENDMODULE TOK_PARAMETER TOK_LOCALPARAM TOK_DEFPARAM
|
%token TOK_MODULE TOK_ENDMODULE TOK_PARAMETER TOK_LOCALPARAM TOK_DEFPARAM
|
||||||
%token TOK_INPUT TOK_OUTPUT TOK_INOUT TOK_WIRE TOK_REG
|
%token TOK_INPUT TOK_OUTPUT TOK_INOUT TOK_WIRE TOK_REG
|
||||||
%token TOK_INTEGER TOK_SIGNED TOK_ASSIGN TOK_ALWAYS TOK_INITIAL
|
%token TOK_INTEGER TOK_SIGNED TOK_ASSIGN TOK_ALWAYS TOK_INITIAL
|
||||||
%token TOK_BEGIN TOK_END TOK_IF TOK_ELSE TOK_FOR
|
%token TOK_BEGIN TOK_END TOK_IF TOK_ELSE TOK_FOR TOK_WHILE TOK_REPEAT
|
||||||
%token TOK_POSEDGE TOK_NEGEDGE TOK_OR
|
%token TOK_POSEDGE TOK_NEGEDGE TOK_OR
|
||||||
%token TOK_CASE TOK_CASEX TOK_CASEZ TOK_ENDCASE TOK_DEFAULT
|
%token TOK_CASE TOK_CASEX TOK_CASEZ TOK_ENDCASE TOK_DEFAULT
|
||||||
%token TOK_FUNCTION TOK_ENDFUNCTION TOK_TASK TOK_ENDTASK
|
%token TOK_FUNCTION TOK_ENDFUNCTION TOK_TASK TOK_ENDTASK
|
||||||
|
@ -819,6 +819,32 @@ behavioral_stmt:
|
||||||
ast_stack.pop_back();
|
ast_stack.pop_back();
|
||||||
ast_stack.pop_back();
|
ast_stack.pop_back();
|
||||||
} |
|
} |
|
||||||
|
attr TOK_WHILE '(' expr ')' {
|
||||||
|
AstNode *node = new AstNode(AST_WHILE);
|
||||||
|
ast_stack.back()->children.push_back(node);
|
||||||
|
ast_stack.push_back(node);
|
||||||
|
append_attr(node, $1);
|
||||||
|
AstNode *block = new AstNode(AST_BLOCK);
|
||||||
|
ast_stack.back()->children.push_back($4);
|
||||||
|
ast_stack.back()->children.push_back(block);
|
||||||
|
ast_stack.push_back(block);
|
||||||
|
} behavioral_stmt {
|
||||||
|
ast_stack.pop_back();
|
||||||
|
ast_stack.pop_back();
|
||||||
|
} |
|
||||||
|
attr TOK_REPEAT '(' expr ')' {
|
||||||
|
AstNode *node = new AstNode(AST_REPEAT);
|
||||||
|
ast_stack.back()->children.push_back(node);
|
||||||
|
ast_stack.push_back(node);
|
||||||
|
append_attr(node, $1);
|
||||||
|
AstNode *block = new AstNode(AST_BLOCK);
|
||||||
|
ast_stack.back()->children.push_back($4);
|
||||||
|
ast_stack.back()->children.push_back(block);
|
||||||
|
ast_stack.push_back(block);
|
||||||
|
} behavioral_stmt {
|
||||||
|
ast_stack.pop_back();
|
||||||
|
ast_stack.pop_back();
|
||||||
|
} |
|
||||||
attr TOK_IF '(' expr ')' {
|
attr TOK_IF '(' expr ')' {
|
||||||
AstNode *node = new AstNode(AST_CASE);
|
AstNode *node = new AstNode(AST_CASE);
|
||||||
AstNode *block = new AstNode(AST_BLOCK);
|
AstNode *block = new AstNode(AST_BLOCK);
|
||||||
|
|
Loading…
Reference in New Issue