Fix some parse tokens having wrong fileline.
This commit is contained in:
parent
d1ee6689c4
commit
0fef3b02ec
217
src/verilog.y
217
src/verilog.y
|
|
@ -752,7 +752,7 @@ package_declaration: // ==IEEE: package_declaration
|
||||||
|
|
||||||
packageFront<modulep>:
|
packageFront<modulep>:
|
||||||
yPACKAGE lifetimeE idAny ';'
|
yPACKAGE lifetimeE idAny ';'
|
||||||
{ $$ = new AstPackage($1,*$3);
|
{ $$ = new AstPackage($<fl>3, *$3);
|
||||||
$$->inLibrary(true); // packages are always libraries; don't want to make them a "top"
|
$$->inLibrary(true); // packages are always libraries; don't want to make them a "top"
|
||||||
$$->modTrace(GRAMMARP->allTracingOn($$->fileline()));
|
$$->modTrace(GRAMMARP->allTracingOn($$->fileline()));
|
||||||
PARSEP->rootp()->addModulep($$);
|
PARSEP->rootp()->addModulep($$);
|
||||||
|
|
@ -809,7 +809,7 @@ package_import_itemList<nodep>:
|
||||||
|
|
||||||
package_import_item<nodep>: // ==IEEE: package_import_item
|
package_import_item<nodep>: // ==IEEE: package_import_item
|
||||||
yaID__aPACKAGE yP_COLONCOLON package_import_itemObj
|
yaID__aPACKAGE yP_COLONCOLON package_import_itemObj
|
||||||
{ $$ = new AstPackageImport($<fl>1, VN_CAST($<scp>1, Package), *$3);
|
{ $$ = new AstPackageImport($<fl>2, VN_CAST($<scp>1, Package), *$3);
|
||||||
SYMP->importItem($<scp>1,*$3); }
|
SYMP->importItem($<scp>1,*$3); }
|
||||||
;
|
;
|
||||||
|
|
||||||
|
|
@ -819,7 +819,7 @@ package_import_itemObj<strp>: // IEEE: part of package_import_item
|
||||||
;
|
;
|
||||||
|
|
||||||
package_export_declaration<nodep>: // IEEE: package_export_declaration
|
package_export_declaration<nodep>: // IEEE: package_export_declaration
|
||||||
yEXPORT '*' yP_COLONCOLON '*' ';' { $$ = new AstPackageExportStarStar($<fl>1); SYMP->exportStarStar($<scp>1); }
|
yEXPORT '*' yP_COLONCOLON '*' ';' { $$ = new AstPackageExportStarStar($<fl>2); SYMP->exportStarStar($<scp>1); }
|
||||||
| yEXPORT package_export_itemList ';' { $$ = $2; }
|
| yEXPORT package_export_itemList ';' { $$ = $2; }
|
||||||
;
|
;
|
||||||
|
|
||||||
|
|
@ -830,7 +830,7 @@ package_export_itemList<nodep>:
|
||||||
|
|
||||||
package_export_item<nodep>: // ==IEEE: package_export_item
|
package_export_item<nodep>: // ==IEEE: package_export_item
|
||||||
yaID__aPACKAGE yP_COLONCOLON package_import_itemObj
|
yaID__aPACKAGE yP_COLONCOLON package_import_itemObj
|
||||||
{ $$ = new AstPackageExport($<fl>1, VN_CAST($<scp>1, Package), *$3);
|
{ $$ = new AstPackageExport($<fl>3, VN_CAST($<scp>1, Package), *$3);
|
||||||
SYMP->exportItem($<scp>1,*$3); }
|
SYMP->exportItem($<scp>1,*$3); }
|
||||||
;
|
;
|
||||||
|
|
||||||
|
|
@ -864,7 +864,8 @@ modFront<modulep>:
|
||||||
// // General note: all *Front functions must call symPushNew before
|
// // General note: all *Front functions must call symPushNew before
|
||||||
// // any formal arguments, as the arguments must land in the new scope.
|
// // any formal arguments, as the arguments must land in the new scope.
|
||||||
yMODULE lifetimeE idAny
|
yMODULE lifetimeE idAny
|
||||||
{ $$ = new AstModule($1,*$3); $$->inLibrary(PARSEP->inLibrary()||PARSEP->inCellDefine());
|
{ $$ = new AstModule($<fl>3,*$3);
|
||||||
|
$$->inLibrary(PARSEP->inLibrary() || PARSEP->inCellDefine());
|
||||||
$$->modTrace(GRAMMARP->allTracingOn($$->fileline()));
|
$$->modTrace(GRAMMARP->allTracingOn($$->fileline()));
|
||||||
PARSEP->rootp()->addModulep($$);
|
PARSEP->rootp()->addModulep($$);
|
||||||
SYMP->pushNew($$); }
|
SYMP->pushNew($$); }
|
||||||
|
|
@ -878,9 +879,9 @@ importsAndParametersE<nodep>: // IEEE: common part of module_declaration, interf
|
||||||
|
|
||||||
udpFront<modulep>:
|
udpFront<modulep>:
|
||||||
yPRIMITIVE lifetimeE idAny
|
yPRIMITIVE lifetimeE idAny
|
||||||
{ $$ = new AstPrimitive($1,*$3); $$->inLibrary(true);
|
{ $$ = new AstPrimitive($<fl>3, *$3); $$->inLibrary(true);
|
||||||
$$->modTrace(false);
|
$$->modTrace(false);
|
||||||
$$->addStmtp(new AstPragma($1,AstPragmaType::INLINE_MODULE));
|
$$->addStmtp(new AstPragma($<fl>3, AstPragmaType::INLINE_MODULE));
|
||||||
GRAMMARP->m_tracingParse = false;
|
GRAMMARP->m_tracingParse = false;
|
||||||
PARSEP->rootp()->addModulep($$);
|
PARSEP->rootp()->addModulep($$);
|
||||||
SYMP->pushNew($$); }
|
SYMP->pushNew($$); }
|
||||||
|
|
@ -890,9 +891,11 @@ parameter_value_assignmentE<pinp>: // IEEE: [ parameter_value_assignment ]
|
||||||
/* empty */ { $$ = NULL; }
|
/* empty */ { $$ = NULL; }
|
||||||
| '#' '(' cellparamList ')' { $$ = $3; }
|
| '#' '(' cellparamList ')' { $$ = $3; }
|
||||||
// // Parentheses are optional around a single parameter
|
// // Parentheses are optional around a single parameter
|
||||||
| '#' yaINTNUM { $$ = new AstPin($1,1,"",new AstConst($1,*$2)); }
|
| '#' yaINTNUM { $$ = new AstPin($<fl>2, 1, "", new AstConst($<fl>2, *$2)); }
|
||||||
| '#' yaFLOATNUM { $$ = new AstPin($1,1,"",new AstConst($1,AstConst::Unsized32(),(int)(($2<0)?($2-0.5):($2+0.5)))); }
|
| '#' yaFLOATNUM { $$ = new AstPin($<fl>2, 1, "",
|
||||||
| '#' idClassSel { $$ = new AstPin($1,1,"",$2); }
|
new AstConst($<fl>2, AstConst::Unsized32(),
|
||||||
|
(int)(($2<0)?($2-0.5):($2+0.5)))); }
|
||||||
|
| '#' idClassSel { $$ = new AstPin($<fl>2, 1, "", $2); }
|
||||||
// // Not needed in Verilator:
|
// // Not needed in Verilator:
|
||||||
// // Side effect of combining *_instantiations
|
// // Side effect of combining *_instantiations
|
||||||
// // '#' delay_value { UNSUP }
|
// // '#' delay_value { UNSUP }
|
||||||
|
|
@ -1047,7 +1050,7 @@ interface_declaration: // IEEE: interface_declaration + interface_nonansi_heade
|
||||||
|
|
||||||
intFront<modulep>:
|
intFront<modulep>:
|
||||||
yINTERFACE lifetimeE idAny/*new_interface*/
|
yINTERFACE lifetimeE idAny/*new_interface*/
|
||||||
{ $$ = new AstIface($1,*$3);
|
{ $$ = new AstIface($<fl>3, *$3);
|
||||||
$$->inLibrary(true);
|
$$->inLibrary(true);
|
||||||
PARSEP->rootp()->addModulep($$);
|
PARSEP->rootp()->addModulep($$);
|
||||||
SYMP->pushNew($$); }
|
SYMP->pushNew($$); }
|
||||||
|
|
@ -1133,7 +1136,8 @@ program_declaration: // IEEE: program_declaration + program_nonansi_header + pr
|
||||||
|
|
||||||
pgmFront<modulep>:
|
pgmFront<modulep>:
|
||||||
yPROGRAM lifetimeE idAny/*new_program*/
|
yPROGRAM lifetimeE idAny/*new_program*/
|
||||||
{ $$ = new AstModule($1,*$3); $$->inLibrary(PARSEP->inLibrary()||PARSEP->inCellDefine());
|
{ $$ = new AstModule($<fl>3,*$3);
|
||||||
|
$$->inLibrary(PARSEP->inLibrary() || PARSEP->inCellDefine());
|
||||||
$$->modTrace(GRAMMARP->allTracingOn($$->fileline()));
|
$$->modTrace(GRAMMARP->allTracingOn($$->fileline()));
|
||||||
PARSEP->rootp()->addModulep($$);
|
PARSEP->rootp()->addModulep($$);
|
||||||
SYMP->pushNew($$); }
|
SYMP->pushNew($$); }
|
||||||
|
|
@ -1188,7 +1192,7 @@ modport_itemList<nodep>: // IEEE: part of modport_declaration
|
||||||
|
|
||||||
modport_item<nodep>: // ==IEEE: modport_item
|
modport_item<nodep>: // ==IEEE: modport_item
|
||||||
id/*new-modport*/ '(' { VARRESET_NONLIST(UNKNOWN); VARIO(INOUT); }
|
id/*new-modport*/ '(' { VARRESET_NONLIST(UNKNOWN); VARIO(INOUT); }
|
||||||
/*cont*/ modportPortsDeclList ')' { $$ = new AstModport($2,*$1,$4); }
|
/*cont*/ modportPortsDeclList ')' { $$ = new AstModport($<fl>1, *$1, $4); }
|
||||||
;
|
;
|
||||||
|
|
||||||
modportPortsDeclList<nodep>:
|
modportPortsDeclList<nodep>:
|
||||||
|
|
@ -1202,14 +1206,14 @@ modportPortsDeclList<nodep>:
|
||||||
// We track the type as with the V2k series of defines, then create as each ID is seen.
|
// We track the type as with the V2k series of defines, then create as each ID is seen.
|
||||||
modportPortsDecl<nodep>:
|
modportPortsDecl<nodep>:
|
||||||
// // IEEE: modport_simple_ports_declaration
|
// // IEEE: modport_simple_ports_declaration
|
||||||
port_direction modportSimplePort { $$ = new AstModportVarRef($<fl>1,*$2,GRAMMARP->m_varIO); }
|
port_direction modportSimplePort { $$ = new AstModportVarRef($<fl>2, *$2, GRAMMARP->m_varIO); }
|
||||||
// // IEEE: modport_clocking_declaration
|
// // IEEE: modport_clocking_declaration
|
||||||
| yCLOCKING idAny/*clocking_identifier*/ { $$ = NULL; BBUNSUP($<fl>1, "Unsupported: Modport clocking"); }
|
| yCLOCKING idAny/*clocking_identifier*/ { $$ = NULL; BBUNSUP($<fl>1, "Unsupported: Modport clocking"); }
|
||||||
// // IEEE: yIMPORT modport_tf_port
|
// // IEEE: yIMPORT modport_tf_port
|
||||||
// // IEEE: yEXPORT modport_tf_port
|
// // IEEE: yEXPORT modport_tf_port
|
||||||
// // modport_tf_port expanded here
|
// // modport_tf_port expanded here
|
||||||
| yIMPORT id/*tf_identifier*/ { $$ = new AstModportFTaskRef($<fl>1,*$2,false); }
|
| yIMPORT id/*tf_identifier*/ { $$ = new AstModportFTaskRef($<fl>2, *$2, false); }
|
||||||
| yEXPORT id/*tf_identifier*/ { $$ = new AstModportFTaskRef($<fl>1,*$2,true); }
|
| yEXPORT id/*tf_identifier*/ { $$ = new AstModportFTaskRef($<fl>2, *$2, true); }
|
||||||
| yIMPORT method_prototype { $$ = NULL; BBUNSUP($<fl>1, "Unsupported: Modport import with prototype"); }
|
| yIMPORT method_prototype { $$ = NULL; BBUNSUP($<fl>1, "Unsupported: Modport import with prototype"); }
|
||||||
| yEXPORT method_prototype { $$ = NULL; BBUNSUP($<fl>1, "Unsupported: Modport export with prototype"); }
|
| yEXPORT method_prototype { $$ = NULL; BBUNSUP($<fl>1, "Unsupported: Modport export with prototype"); }
|
||||||
// Continuations of above after a comma.
|
// Continuations of above after a comma.
|
||||||
|
|
@ -1581,7 +1585,7 @@ tf_variable_identifier<varp>: // IEEE: part of list_of_tf_variable_identifiers
|
||||||
{ $$ = VARDONEA($<fl>1,*$1, $2, $3); }
|
{ $$ = VARDONEA($<fl>1,*$1, $2, $3); }
|
||||||
| id variable_dimensionListE sigAttrListE '=' expr
|
| id variable_dimensionListE sigAttrListE '=' expr
|
||||||
{ $$ = VARDONEA($<fl>1,*$1, $2, $3);
|
{ $$ = VARDONEA($<fl>1,*$1, $2, $3);
|
||||||
$$->addNext(new AstAssign($4, new AstVarRef($4, *$1, true), $5)); }
|
$$->addNext(new AstAssign($4, new AstVarRef($<fl>1, *$1, true), $5)); }
|
||||||
;
|
;
|
||||||
|
|
||||||
variable_declExpr<nodep>: // IEEE: part of variable_decl_assignment - rhs of expr
|
variable_declExpr<nodep>: // IEEE: part of variable_decl_assignment - rhs of expr
|
||||||
|
|
@ -1709,9 +1713,9 @@ data_declarationVarFront: // IEEE: part of data_declaration
|
||||||
| /**/ yVAR lifetimeE signingE rangeList { /*VARRESET-in-ddVar*/ VARDTYPE(GRAMMARP->addRange(new AstBasicDType($<fl>1, LOGIC_IMPLICIT, $3), $4,true)); }
|
| /**/ yVAR lifetimeE signingE rangeList { /*VARRESET-in-ddVar*/ VARDTYPE(GRAMMARP->addRange(new AstBasicDType($<fl>1, LOGIC_IMPLICIT, $3), $4,true)); }
|
||||||
//
|
//
|
||||||
// // implicit_type expanded into /*empty*/ or "signingE rangeList"
|
// // implicit_type expanded into /*empty*/ or "signingE rangeList"
|
||||||
| yCONST__ETC yVAR lifetimeE data_type { VARRESET_NONLIST(VAR); VARDTYPE(new AstConstDType($<fl>1, VFlagChildDType(), $4)); }
|
| yCONST__ETC yVAR lifetimeE data_type { VARRESET_NONLIST(VAR); VARDTYPE(new AstConstDType($<fl>2, VFlagChildDType(), $4)); }
|
||||||
| yCONST__ETC yVAR lifetimeE { VARRESET_NONLIST(VAR); VARDTYPE(new AstConstDType($<fl>1, VFlagChildDType(), new AstBasicDType($<fl>2, LOGIC_IMPLICIT))); }
|
| yCONST__ETC yVAR lifetimeE { VARRESET_NONLIST(VAR); VARDTYPE(new AstConstDType($<fl>2, VFlagChildDType(), new AstBasicDType($<fl>2, LOGIC_IMPLICIT))); }
|
||||||
| yCONST__ETC yVAR lifetimeE signingE rangeList { VARRESET_NONLIST(VAR); VARDTYPE(new AstConstDType($<fl>1, VFlagChildDType(), GRAMMARP->addRange(new AstBasicDType($<fl>2, LOGIC_IMPLICIT, $4), $5,true))); }
|
| yCONST__ETC yVAR lifetimeE signingE rangeList { VARRESET_NONLIST(VAR); VARDTYPE(new AstConstDType($<fl>2, VFlagChildDType(), GRAMMARP->addRange(new AstBasicDType($<fl>2, LOGIC_IMPLICIT, $4), $5,true))); }
|
||||||
//
|
//
|
||||||
// // Expanded: "constE lifetimeE data_type"
|
// // Expanded: "constE lifetimeE data_type"
|
||||||
| /**/ data_type { VARRESET_NONLIST(VAR); VARDTYPE($1); }
|
| /**/ data_type { VARRESET_NONLIST(VAR); VARDTYPE($1); }
|
||||||
|
|
@ -1730,16 +1734,16 @@ implicit_typeE<dtypep>: // IEEE: part of *data_type_or_implicit
|
||||||
type_declaration<nodep>: // ==IEEE: type_declaration
|
type_declaration<nodep>: // ==IEEE: type_declaration
|
||||||
// // Use idAny, as we can redeclare a typedef on an existing typedef
|
// // Use idAny, as we can redeclare a typedef on an existing typedef
|
||||||
yTYPEDEF data_type idAny variable_dimensionListE dtypeAttrListE ';'
|
yTYPEDEF data_type idAny variable_dimensionListE dtypeAttrListE ';'
|
||||||
/**/ { $$ = new AstTypedef($<fl>1, *$3, $5, VFlagChildDType(), GRAMMARP->createArray($2,$4,false));
|
/**/ { $$ = new AstTypedef($<fl>3, *$3, $5, VFlagChildDType(), GRAMMARP->createArray($2,$4,false));
|
||||||
SYMP->reinsert($$); PARSEP->tagNodep($$); }
|
SYMP->reinsert($$); PARSEP->tagNodep($$); }
|
||||||
//UNSUP yTYPEDEF id/*interface*/ '.' idAny/*type*/ idAny/*type*/ ';' { $$ = NULL; $1->v3error("Unsupported: SystemVerilog 2005 typedef in this context"); } //UNSUP
|
//UNSUP yTYPEDEF id/*interface*/ '.' idAny/*type*/ idAny/*type*/ ';' { $$ = NULL; $1->v3error("Unsupported: SystemVerilog 2005 typedef in this context"); } //UNSUP
|
||||||
// // Combines into above "data_type id" rule
|
// // Combines into above "data_type id" rule
|
||||||
// // Verilator: Not important what it is in the AST, just need to make sure the yaID__aTYPE gets returned
|
// // Verilator: Not important what it is in the AST, just need to make sure the yaID__aTYPE gets returned
|
||||||
| yTYPEDEF id ';' { $$ = NULL; $$ = new AstTypedefFwd($<fl>1, *$2); SYMP->reinsert($$); PARSEP->tagNodep($$); }
|
| yTYPEDEF id ';' { $$ = NULL; $$ = new AstTypedefFwd($<fl>2, *$2); SYMP->reinsert($$); PARSEP->tagNodep($$); }
|
||||||
| yTYPEDEF yENUM idAny ';' { $$ = NULL; $$ = new AstTypedefFwd($<fl>1, *$3); SYMP->reinsert($$); PARSEP->tagNodep($$); }
|
| yTYPEDEF yENUM idAny ';' { $$ = NULL; $$ = new AstTypedefFwd($<fl>3, *$3); SYMP->reinsert($$); PARSEP->tagNodep($$); }
|
||||||
| yTYPEDEF ySTRUCT idAny ';' { $$ = NULL; $$ = new AstTypedefFwd($<fl>1, *$3); SYMP->reinsert($$); PARSEP->tagNodep($$); }
|
| yTYPEDEF ySTRUCT idAny ';' { $$ = NULL; $$ = new AstTypedefFwd($<fl>3, *$3); SYMP->reinsert($$); PARSEP->tagNodep($$); }
|
||||||
| yTYPEDEF yUNION idAny ';' { $$ = NULL; $$ = new AstTypedefFwd($<fl>1, *$3); SYMP->reinsert($$); PARSEP->tagNodep($$); }
|
| yTYPEDEF yUNION idAny ';' { $$ = NULL; $$ = new AstTypedefFwd($<fl>3, *$3); SYMP->reinsert($$); PARSEP->tagNodep($$); }
|
||||||
//UNSUP yTYPEDEF yCLASS idAny ';' { $$ = NULL; $$ = new AstTypedefFwd($<fl>1, *$3); SYMP->reinsert($$); PARSEP->tagNodep($$); }
|
//UNSUP yTYPEDEF yCLASS idAny ';' { $$ = NULL; $$ = new AstTypedefFwd($<fl>3, *$3); SYMP->reinsert($$); PARSEP->tagNodep($$); }
|
||||||
//UNSUP yTYPEDEF yINTERFACE yCLASS idAny ';' { ... }
|
//UNSUP yTYPEDEF yINTERFACE yCLASS idAny ';' { ... }
|
||||||
;
|
;
|
||||||
|
|
||||||
|
|
@ -1862,7 +1866,7 @@ aliasEqList: // IEEE: part of net_alias
|
||||||
bind_directive<nodep>: // ==IEEE: bind_directive + bind_target_scope
|
bind_directive<nodep>: // ==IEEE: bind_directive + bind_target_scope
|
||||||
// // ';' - Note IEEE grammar is wrong, includes extra ';' - it's already in module_instantiation
|
// // ';' - Note IEEE grammar is wrong, includes extra ';' - it's already in module_instantiation
|
||||||
// // We merged the rules - id may be a bind_target_instance or module_identifier or interface_identifier
|
// // We merged the rules - id may be a bind_target_instance or module_identifier or interface_identifier
|
||||||
yBIND bind_target_instance bind_instantiation { $$ = new AstBind($<fl>1,*$2,$3); }
|
yBIND bind_target_instance bind_instantiation { $$ = new AstBind($<fl>2, *$2, $3); }
|
||||||
| yBIND bind_target_instance ':' bind_target_instance_list bind_instantiation {
|
| yBIND bind_target_instance ':' bind_target_instance_list bind_instantiation {
|
||||||
$$=NULL; BBUNSUP($1, "Unsupported: Bind with instance list"); }
|
$$=NULL; BBUNSUP($1, "Unsupported: Bind with instance list"); }
|
||||||
;
|
;
|
||||||
|
|
@ -1909,9 +1913,9 @@ generate_block_or_null<nodep>: // IEEE: generate_block_or_null
|
||||||
genItemBegin<nodep>: // IEEE: part of generate_block
|
genItemBegin<nodep>: // IEEE: part of generate_block
|
||||||
yBEGIN genItemList yEND { $$ = new AstBegin($1,"genblk",$2,true); }
|
yBEGIN genItemList yEND { $$ = new AstBegin($1,"genblk",$2,true); }
|
||||||
| yBEGIN yEND { $$ = NULL; }
|
| yBEGIN yEND { $$ = NULL; }
|
||||||
| id ':' yBEGIN genItemList yEND endLabelE { $$ = new AstBegin($2,*$1,$4,true); GRAMMARP->endLabel($<fl>6,*$1,$6); }
|
| id ':' yBEGIN genItemList yEND endLabelE { $$ = new AstBegin($<fl>1,*$1,$4,true); GRAMMARP->endLabel($<fl>6,*$1,$6); }
|
||||||
| id ':' yBEGIN yEND endLabelE { $$ = NULL; GRAMMARP->endLabel($<fl>5,*$1,$5); }
|
| id ':' yBEGIN yEND endLabelE { $$ = NULL; GRAMMARP->endLabel($<fl>5,*$1,$5); }
|
||||||
| yBEGIN ':' idAny genItemList yEND endLabelE { $$ = new AstBegin($2,*$3,$4,true); GRAMMARP->endLabel($<fl>6,*$3,$6); }
|
| yBEGIN ':' idAny genItemList yEND endLabelE { $$ = new AstBegin($<fl>3,*$3,$4,true); GRAMMARP->endLabel($<fl>6,*$3,$6); }
|
||||||
| yBEGIN ':' idAny yEND endLabelE { $$ = NULL; GRAMMARP->endLabel($<fl>5,*$3,$5); }
|
| yBEGIN ':' idAny yEND endLabelE { $$ = NULL; GRAMMARP->endLabel($<fl>5,*$3,$5); }
|
||||||
;
|
;
|
||||||
|
|
||||||
|
|
@ -1968,7 +1972,7 @@ loop_generate_construct<nodep>: // ==IEEE: loop_generate_construct
|
||||||
|
|
||||||
genvar_initialization<nodep>: // ==IEEE: genvar_initalization
|
genvar_initialization<nodep>: // ==IEEE: genvar_initalization
|
||||||
varRefBase '=' expr { $$ = new AstAssign($2,$1,$3); }
|
varRefBase '=' expr { $$ = new AstAssign($2,$1,$3); }
|
||||||
| yGENVAR genvar_identifierDecl '=' constExpr { $$ = $2; $2->addNext(new AstAssign($3,new AstVarRef($3,$2,true), $4)); }
|
| yGENVAR genvar_identifierDecl '=' constExpr { $$ = $2; $2->addNext(new AstAssign($3,new AstVarRef($2->fileline(),$2,true), $4)); }
|
||||||
;
|
;
|
||||||
|
|
||||||
genvar_iteration<nodep>: // ==IEEE: genvar_iteration
|
genvar_iteration<nodep>: // ==IEEE: genvar_iteration
|
||||||
|
|
@ -2004,7 +2008,7 @@ case_generate_itemList<nodep>: // IEEE: { case_generate_itemList }
|
||||||
|
|
||||||
case_generate_item<nodep>: // ==IEEE: case_generate_item
|
case_generate_item<nodep>: // ==IEEE: case_generate_item
|
||||||
caseCondList ':' generate_block_or_null { $$ = new AstCaseItem($2,$1,$3); }
|
caseCondList ':' generate_block_or_null { $$ = new AstCaseItem($2,$1,$3); }
|
||||||
| yDEFAULT ':' generate_block_or_null { $$ = new AstCaseItem($2,NULL,$3); }
|
| yDEFAULT ':' generate_block_or_null { $$ = new AstCaseItem($1,NULL,$3); }
|
||||||
| yDEFAULT generate_block_or_null { $$ = new AstCaseItem($1,NULL,$2); }
|
| yDEFAULT generate_block_or_null { $$ = new AstCaseItem($1,NULL,$2); }
|
||||||
;
|
;
|
||||||
|
|
||||||
|
|
@ -2058,7 +2062,8 @@ netSigList<varp>: // IEEE: list_of_port_identifiers
|
||||||
|
|
||||||
netSig<varp>: // IEEE: net_decl_assignment - one element from list_of_port_identifiers
|
netSig<varp>: // IEEE: net_decl_assignment - one element from list_of_port_identifiers
|
||||||
netId sigAttrListE { $$ = VARDONEA($<fl>1,*$1, NULL, $2); }
|
netId sigAttrListE { $$ = VARDONEA($<fl>1,*$1, NULL, $2); }
|
||||||
| netId sigAttrListE '=' expr { $$ = VARDONEA($<fl>1,*$1, NULL, $2); $$->addNext(new AstAssignW($3,new AstVarRef($3,$$->name(),true),$4)); }
|
| netId sigAttrListE '=' expr { $$ = VARDONEA($<fl>1,*$1, NULL, $2);
|
||||||
|
$$->addNext(new AstAssignW($3, new AstVarRef($<fl>1, *$1, true), $4)); }
|
||||||
| netId variable_dimensionList sigAttrListE { $$ = VARDONEA($<fl>1,*$1, $2, $3); }
|
| netId variable_dimensionList sigAttrListE { $$ = VARDONEA($<fl>1,*$1, $2, $3); }
|
||||||
;
|
;
|
||||||
|
|
||||||
|
|
@ -2240,15 +2245,19 @@ cellparamItemE<pinp>: // IEEE: named_parameter_assignment + empty
|
||||||
// Note empty can match either () or (,); V3LinkCells cleans up ()
|
// Note empty can match either () or (,); V3LinkCells cleans up ()
|
||||||
/* empty: ',,' is legal */ { $$ = new AstPin(CRELINE(), PINNUMINC(), "", NULL); }
|
/* empty: ',,' is legal */ { $$ = new AstPin(CRELINE(), PINNUMINC(), "", NULL); }
|
||||||
| yP_DOTSTAR { $$ = new AstPin($1,PINNUMINC(),".*",NULL); }
|
| yP_DOTSTAR { $$ = new AstPin($1,PINNUMINC(),".*",NULL); }
|
||||||
| '.' idSVKwd { $$ = new AstPin($1,PINNUMINC(),*$2,new AstParseRef($1,AstParseRefExp::PX_TEXT,*$2,NULL,NULL)); $$->svImplicit(true);}
|
| '.' idSVKwd { $$ = new AstPin($<fl>2,PINNUMINC(), *$2,
|
||||||
| '.' idAny { $$ = new AstPin($1,PINNUMINC(),*$2,new AstParseRef($1,AstParseRefExp::PX_TEXT,*$2,NULL,NULL)); $$->svImplicit(true);}
|
new AstParseRef($<fl>2,AstParseRefExp::PX_TEXT,*$2,NULL,NULL));
|
||||||
| '.' idAny '(' ')' { $$ = new AstPin($1,PINNUMINC(),*$2,NULL); }
|
$$->svImplicit(true);}
|
||||||
|
| '.' idAny { $$ = new AstPin($<fl>2,PINNUMINC(), *$2,
|
||||||
|
new AstParseRef($<fl>2,AstParseRefExp::PX_TEXT,*$2,NULL,NULL));
|
||||||
|
$$->svImplicit(true);}
|
||||||
|
| '.' idAny '(' ')' { $$ = new AstPin($<fl>2,PINNUMINC(),*$2,NULL); }
|
||||||
// // mintypmax is expanded here, as it might be a UDP or gate primitive
|
// // mintypmax is expanded here, as it might be a UDP or gate primitive
|
||||||
| '.' idAny '(' expr ')' { $$ = new AstPin($1,PINNUMINC(),*$2,$4); }
|
| '.' idAny '(' expr ')' { $$ = new AstPin($<fl>2,PINNUMINC(),*$2,$4); }
|
||||||
//UNSUP '.' idAny '(' expr ':' expr ')' { }
|
//UNSUP '.' idAny '(' expr ':' expr ')' { }
|
||||||
//UNSUP '.' idAny '(' expr ':' expr ':' expr ')' { }
|
//UNSUP '.' idAny '(' expr ':' expr ':' expr ')' { }
|
||||||
// // For parameters
|
// // For parameters
|
||||||
| '.' idAny '(' data_type ')' { $$ = new AstPin($1,PINNUMINC(),*$2,$4); }
|
| '.' idAny '(' data_type ')' { $$ = new AstPin($<fl>2, PINNUMINC(), *$2, $4); }
|
||||||
// // For parameters
|
// // For parameters
|
||||||
| data_type { $$ = new AstPin($1->fileline(),PINNUMINC(),"",$1); }
|
| data_type { $$ = new AstPin($1->fileline(),PINNUMINC(),"",$1); }
|
||||||
//
|
//
|
||||||
|
|
@ -2261,11 +2270,11 @@ cellpinItemE<pinp>: // IEEE: named_port_connection + empty
|
||||||
// Note empty can match either () or (,); V3LinkCells cleans up ()
|
// Note empty can match either () or (,); V3LinkCells cleans up ()
|
||||||
/* empty: ',,' is legal */ { $$ = new AstPin(CRELINE(), PINNUMINC(), "", NULL); }
|
/* empty: ',,' is legal */ { $$ = new AstPin(CRELINE(), PINNUMINC(), "", NULL); }
|
||||||
| yP_DOTSTAR { $$ = new AstPin($1,PINNUMINC(),".*",NULL); }
|
| yP_DOTSTAR { $$ = new AstPin($1,PINNUMINC(),".*",NULL); }
|
||||||
| '.' idSVKwd { $$ = new AstPin($1,PINNUMINC(),*$2,new AstParseRef($1,AstParseRefExp::PX_TEXT,*$2,NULL,NULL)); $$->svImplicit(true);}
|
| '.' idSVKwd { $$ = new AstPin($<fl>2,PINNUMINC(),*$2,new AstParseRef($<fl>2,AstParseRefExp::PX_TEXT,*$2,NULL,NULL)); $$->svImplicit(true);}
|
||||||
| '.' idAny { $$ = new AstPin($1,PINNUMINC(),*$2,new AstParseRef($1,AstParseRefExp::PX_TEXT,*$2,NULL,NULL)); $$->svImplicit(true);}
|
| '.' idAny { $$ = new AstPin($<fl>2,PINNUMINC(),*$2,new AstParseRef($<fl>2,AstParseRefExp::PX_TEXT,*$2,NULL,NULL)); $$->svImplicit(true);}
|
||||||
| '.' idAny '(' ')' { $$ = new AstPin($1,PINNUMINC(),*$2,NULL); }
|
| '.' idAny '(' ')' { $$ = new AstPin($<fl>2,PINNUMINC(),*$2,NULL); }
|
||||||
// // mintypmax is expanded here, as it might be a UDP or gate primitive
|
// // mintypmax is expanded here, as it might be a UDP or gate primitive
|
||||||
| '.' idAny '(' expr ')' { $$ = new AstPin($1,PINNUMINC(),*$2,$4); }
|
| '.' idAny '(' expr ')' { $$ = new AstPin($<fl>2,PINNUMINC(),*$2,$4); }
|
||||||
//UNSUP '.' idAny '(' expr ':' expr ')' { }
|
//UNSUP '.' idAny '(' expr ':' expr ')' { }
|
||||||
//UNSUP '.' idAny '(' expr ':' expr ':' expr ')' { }
|
//UNSUP '.' idAny '(' expr ':' expr ':' expr ')' { }
|
||||||
//
|
//
|
||||||
|
|
@ -2358,13 +2367,13 @@ par_block<nodep>: // ==IEEE: par_block
|
||||||
|
|
||||||
seq_blockFront<beginp>: // IEEE: part of seq_block
|
seq_blockFront<beginp>: // IEEE: part of seq_block
|
||||||
yBEGIN { $$ = new AstBegin($1,"",NULL); SYMP->pushNew($$); }
|
yBEGIN { $$ = new AstBegin($1,"",NULL); SYMP->pushNew($$); }
|
||||||
| yBEGIN ':' idAny/*new-block_identifier*/ { $$ = new AstBegin($1,*$3,NULL); SYMP->pushNew($$); }
|
| yBEGIN ':' idAny/*new-block_identifier*/ { $$ = new AstBegin($<fl>3, *$3, NULL); SYMP->pushNew($$); }
|
||||||
;
|
;
|
||||||
|
|
||||||
par_blockFront<beginp>: // IEEE: part of par_block
|
par_blockFront<beginp>: // IEEE: part of par_block
|
||||||
yFORK { $$ = new AstBegin($1, "", NULL); SYMP->pushNew($$);
|
yFORK { $$ = new AstBegin($1, "", NULL); SYMP->pushNew($$);
|
||||||
BBUNSUP($1, "Unsupported: fork statements"); }
|
BBUNSUP($1, "Unsupported: fork statements"); }
|
||||||
| yFORK ':' idAny/*new-block_identifier*/ { $$ = new AstBegin($1,*$3,NULL); SYMP->pushNew($$);
|
| yFORK ':' idAny/*new-block_identifier*/ { $$ = new AstBegin($<fl>3, *$3, NULL); SYMP->pushNew($$);
|
||||||
BBUNSUP($1, "Unsupported: fork statements"); }
|
BBUNSUP($1, "Unsupported: fork statements"); }
|
||||||
;
|
;
|
||||||
|
|
||||||
|
|
@ -2395,7 +2404,7 @@ stmtList<nodep>:
|
||||||
stmt<nodep>: // IEEE: statement_or_null == function_statement_or_null
|
stmt<nodep>: // IEEE: statement_or_null == function_statement_or_null
|
||||||
statement_item { $$ = $1; }
|
statement_item { $$ = $1; }
|
||||||
// // S05 block creation rule
|
// // S05 block creation rule
|
||||||
| id/*block_identifier*/ ':' statement_item { $$ = new AstBegin($2, *$1, $3); }
|
| id/*block_identifier*/ ':' statement_item { $$ = new AstBegin($<fl>1, *$1, $3); }
|
||||||
// // from _or_null
|
// // from _or_null
|
||||||
| ';' { $$ = NULL; }
|
| ';' { $$ = NULL; }
|
||||||
;
|
;
|
||||||
|
|
@ -2616,20 +2625,20 @@ case_insideListE<caseitemp>: // IEEE: [ { case_inside_item } ]
|
||||||
|
|
||||||
case_itemList<caseitemp>: // IEEE: { case_item + ... }
|
case_itemList<caseitemp>: // IEEE: { case_item + ... }
|
||||||
caseCondList ':' stmtBlock { $$ = new AstCaseItem($2,$1,$3); }
|
caseCondList ':' stmtBlock { $$ = new AstCaseItem($2,$1,$3); }
|
||||||
| yDEFAULT ':' stmtBlock { $$ = new AstCaseItem($2,NULL,$3); }
|
| yDEFAULT ':' stmtBlock { $$ = new AstCaseItem($1,NULL,$3); }
|
||||||
| yDEFAULT stmtBlock { $$ = new AstCaseItem($1,NULL,$2); }
|
| yDEFAULT stmtBlock { $$ = new AstCaseItem($1,NULL,$2); }
|
||||||
| case_itemList caseCondList ':' stmtBlock { $$ = $1;$1->addNext(new AstCaseItem($3,$2,$4)); }
|
| case_itemList caseCondList ':' stmtBlock { $$ = $1;$1->addNext(new AstCaseItem($3,$2,$4)); }
|
||||||
| case_itemList yDEFAULT stmtBlock { $$ = $1;$1->addNext(new AstCaseItem($2,NULL,$3)); }
|
| case_itemList yDEFAULT stmtBlock { $$ = $1;$1->addNext(new AstCaseItem($2,NULL,$3)); }
|
||||||
| case_itemList yDEFAULT ':' stmtBlock { $$ = $1;$1->addNext(new AstCaseItem($3,NULL,$4)); }
|
| case_itemList yDEFAULT ':' stmtBlock { $$ = $1;$1->addNext(new AstCaseItem($2,NULL,$4)); }
|
||||||
;
|
;
|
||||||
|
|
||||||
case_inside_itemList<caseitemp>: // IEEE: { case_inside_item + open_range_list ... }
|
case_inside_itemList<caseitemp>: // IEEE: { case_inside_item + open_range_list ... }
|
||||||
open_range_list ':' stmtBlock { $$ = new AstCaseItem($2,$1,$3); }
|
open_range_list ':' stmtBlock { $$ = new AstCaseItem($2,$1,$3); }
|
||||||
| yDEFAULT ':' stmtBlock { $$ = new AstCaseItem($2,NULL,$3); }
|
| yDEFAULT ':' stmtBlock { $$ = new AstCaseItem($1,NULL,$3); }
|
||||||
| yDEFAULT stmtBlock { $$ = new AstCaseItem($1,NULL,$2); }
|
| yDEFAULT stmtBlock { $$ = new AstCaseItem($1,NULL,$2); }
|
||||||
| case_inside_itemList open_range_list ':' stmtBlock { $$ = $1;$1->addNext(new AstCaseItem($3,$2,$4)); }
|
| case_inside_itemList open_range_list ':' stmtBlock { $$ = $1;$1->addNext(new AstCaseItem($3,$2,$4)); }
|
||||||
| case_inside_itemList yDEFAULT stmtBlock { $$ = $1;$1->addNext(new AstCaseItem($2,NULL,$3)); }
|
| case_inside_itemList yDEFAULT stmtBlock { $$ = $1;$1->addNext(new AstCaseItem($2,NULL,$3)); }
|
||||||
| case_inside_itemList yDEFAULT ':' stmtBlock { $$ = $1;$1->addNext(new AstCaseItem($3,NULL,$4)); }
|
| case_inside_itemList yDEFAULT ':' stmtBlock { $$ = $1;$1->addNext(new AstCaseItem($2,NULL,$4)); }
|
||||||
;
|
;
|
||||||
|
|
||||||
open_range_list<nodep>: // ==IEEE: open_range_list + open_value_range
|
open_range_list<nodep>: // ==IEEE: open_range_list + open_value_range
|
||||||
|
|
@ -2643,7 +2652,7 @@ open_value_range<nodep>: // ==IEEE: open_value_range
|
||||||
|
|
||||||
value_range<nodep>: // ==IEEE: value_range
|
value_range<nodep>: // ==IEEE: value_range
|
||||||
expr { $$ = $1; }
|
expr { $$ = $1; }
|
||||||
| '[' expr ':' expr ']' { $$ = new AstInsideRange($3,$2,$4); }
|
| '[' expr ':' expr ']' { $$ = new AstInsideRange($1, $2, $4); }
|
||||||
;
|
;
|
||||||
|
|
||||||
caseCondList<nodep>: // IEEE: part of case_item
|
caseCondList<nodep>: // IEEE: part of case_item
|
||||||
|
|
@ -2677,10 +2686,10 @@ patternMemberList<nodep>: // IEEE: part of pattern and assignment_pattern
|
||||||
;
|
;
|
||||||
|
|
||||||
patternMemberOne<patmemberp>: // IEEE: part of pattern and assignment_pattern
|
patternMemberOne<patmemberp>: // IEEE: part of pattern and assignment_pattern
|
||||||
patternKey ':' expr { $$ = new AstPatMember($2,$3,$1,NULL); }
|
patternKey ':' expr { $$ = new AstPatMember($1->fileline(),$3,$1,NULL); }
|
||||||
| patternKey ':' patternNoExpr { $$ = NULL; $2->v3error("Unsupported: '{} .* patterns"); }
|
| patternKey ':' patternNoExpr { $$ = NULL; $2->v3error("Unsupported: '{} .* patterns"); }
|
||||||
// // From assignment_pattern_key
|
// // From assignment_pattern_key
|
||||||
| yDEFAULT ':' expr { $$ = new AstPatMember($2,$3,NULL,NULL); $$->isDefault(true); }
|
| yDEFAULT ':' expr { $$ = new AstPatMember($1,$3,NULL,NULL); $$->isDefault(true); }
|
||||||
| yDEFAULT ':' patternNoExpr { $$ = NULL; $2->v3error("Unsupported: '{} .* patterns"); }
|
| yDEFAULT ':' patternNoExpr { $$ = NULL; $2->v3error("Unsupported: '{} .* patterns"); }
|
||||||
;
|
;
|
||||||
|
|
||||||
|
|
@ -2734,12 +2743,12 @@ for_initializationItem<nodep>: // IEEE: variable_assignment + for_variable_decl
|
||||||
data_type idAny/*new*/ '=' expr
|
data_type idAny/*new*/ '=' expr
|
||||||
{ VARRESET_NONLIST(VAR); VARDTYPE($1);
|
{ VARRESET_NONLIST(VAR); VARDTYPE($1);
|
||||||
$$ = VARDONEA($<fl>2,*$2,NULL,NULL);
|
$$ = VARDONEA($<fl>2,*$2,NULL,NULL);
|
||||||
$$->addNext(new AstAssign($3, new AstVarRef($3,*$2,true), $4));}
|
$$->addNext(new AstAssign($3, new AstVarRef($<fl>2, *$2, true), $4));}
|
||||||
// // IEEE-2012:
|
// // IEEE-2012:
|
||||||
| yVAR data_type idAny/*new*/ '=' expr
|
| yVAR data_type idAny/*new*/ '=' expr
|
||||||
{ VARRESET_NONLIST(VAR); VARDTYPE($2);
|
{ VARRESET_NONLIST(VAR); VARDTYPE($2);
|
||||||
$$ = VARDONEA($<fl>3,*$3,NULL,NULL);
|
$$ = VARDONEA($<fl>3,*$3,NULL,NULL);
|
||||||
$$->addNext(new AstAssign($4, new AstVarRef($4,*$3,true), $5));}
|
$$->addNext(new AstAssign($4, new AstVarRef($<fl>3, *$3, true), $5));}
|
||||||
// // IEEE: variable_assignment
|
// // IEEE: variable_assignment
|
||||||
| varRefBase '=' expr { $$ = new AstAssign($2, $1, $3); }
|
| varRefBase '=' expr { $$ = new AstAssign($2, $1, $3); }
|
||||||
;
|
;
|
||||||
|
|
@ -2778,7 +2787,7 @@ funcRef<nodep>: // IEEE: part of tf_call
|
||||||
// // sequence_instance sequence_identifier sequence_actual_arg
|
// // sequence_instance sequence_identifier sequence_actual_arg
|
||||||
// // let_expression let_identifier let_actual_arg
|
// // let_expression let_identifier let_actual_arg
|
||||||
//
|
//
|
||||||
id '(' list_of_argumentsE ')' { $$ = new AstFuncRef($2, *$1, $3); }
|
id '(' list_of_argumentsE ')' { $$ = new AstFuncRef($<fl>1, *$1, $3); }
|
||||||
| package_scopeIdFollows id '(' list_of_argumentsE ')' { $$ = AstDot::newIfPkg($<fl>2, $1, new AstFuncRef($<fl>2,*$2,$4)); }
|
| package_scopeIdFollows id '(' list_of_argumentsE ')' { $$ = AstDot::newIfPkg($<fl>2, $1, new AstFuncRef($<fl>2,*$2,$4)); }
|
||||||
//UNSUP: idDotted is really just id to allow dotted method calls
|
//UNSUP: idDotted is really just id to allow dotted method calls
|
||||||
;
|
;
|
||||||
|
|
@ -2805,10 +2814,11 @@ system_t_call<nodep>: // IEEE: system_tf_call (as task)
|
||||||
| yaD_IGNORE '(' exprList ')' { $$ = new AstSysIgnore($<fl>1,$3); }
|
| yaD_IGNORE '(' exprList ')' { $$ = new AstSysIgnore($<fl>1,$3); }
|
||||||
//
|
//
|
||||||
| yaD_DPI parenE { $$ = new AstTaskRef($<fl>1,*$1,NULL); }
|
| yaD_DPI parenE { $$ = new AstTaskRef($<fl>1,*$1,NULL); }
|
||||||
| yaD_DPI '(' exprList ')' { $$ = new AstTaskRef($2,*$1,$3); GRAMMARP->argWrapList(VN_CAST($$, TaskRef)); }
|
| yaD_DPI '(' exprList ')' { $$ = new AstTaskRef($<fl>1, *$1, $3);
|
||||||
|
GRAMMARP->argWrapList(VN_CAST($$, TaskRef)); }
|
||||||
//
|
//
|
||||||
| yD_C '(' cStrList ')' { $$ = (v3Global.opt.ignc() ? NULL : new AstUCStmt($1,$3)); }
|
| yD_C '(' cStrList ')' { $$ = (v3Global.opt.ignc() ? NULL : new AstUCStmt($1,$3)); }
|
||||||
| yD_SYSTEM '(' expr ')' { $$ = new AstSystemT($1,$3); }
|
| yD_SYSTEM '(' expr ')' { $$ = new AstSystemT($1, $3); }
|
||||||
//
|
//
|
||||||
| yD_FCLOSE '(' idClassSel ')' { $$ = new AstFClose($1, $3); }
|
| yD_FCLOSE '(' idClassSel ')' { $$ = new AstFClose($1, $3); }
|
||||||
| yD_FFLUSH parenE { $$ = NULL; BBUNSUP($1, "Unsupported: $fflush of all handles does not map to C++."); }
|
| yD_FFLUSH parenE { $$ = NULL; BBUNSUP($1, "Unsupported: $fflush of all handles does not map to C++."); }
|
||||||
|
|
@ -2854,11 +2864,11 @@ system_t_call<nodep>: // IEEE: system_tf_call (as task)
|
||||||
;
|
;
|
||||||
|
|
||||||
system_f_call<nodep>: // IEEE: system_tf_call (as func)
|
system_f_call<nodep>: // IEEE: system_tf_call (as func)
|
||||||
yaD_IGNORE parenE { $$ = new AstConst($<fl>1, AstConst::StringToParse(), "'b0"); } // Unsized 0
|
yaD_IGNORE parenE { $$ = new AstConst($<fl>1, AstConst::StringToParse(), "'b0"); } // Unsized 0
|
||||||
| yaD_IGNORE '(' exprList ')' { $$ = new AstConst($2, AstConst::StringToParse(), "'b0"); } // Unsized 0
|
| yaD_IGNORE '(' exprList ')' { $$ = new AstConst($<fl>1, AstConst::StringToParse(), "'b0"); } // Unsized 0
|
||||||
//
|
//
|
||||||
| yaD_DPI parenE { $$ = new AstFuncRef($<fl>1,*$1,NULL); }
|
| yaD_DPI parenE { $$ = new AstFuncRef($<fl>1,*$1,NULL); }
|
||||||
| yaD_DPI '(' exprList ')' { $$ = new AstFuncRef($2,*$1,$3); GRAMMARP->argWrapList(VN_CAST($$, FuncRef)); }
|
| yaD_DPI '(' exprList ')' { $$ = new AstFuncRef($<fl>1,*$1,$3); GRAMMARP->argWrapList(VN_CAST($$, FuncRef)); }
|
||||||
//
|
//
|
||||||
| yD_C '(' cStrList ')' { $$ = (v3Global.opt.ignc() ? NULL : new AstUCFunc($1,$3)); }
|
| yD_C '(' cStrList ')' { $$ = (v3Global.opt.ignc() ? NULL : new AstUCFunc($1,$3)); }
|
||||||
| yD_SYSTEM '(' expr ')' { $$ = new AstSystemF($1,$3); }
|
| yD_SYSTEM '(' expr ')' { $$ = new AstSystemF($1,$3); }
|
||||||
|
|
@ -3152,9 +3162,9 @@ dpi_import_export<nodep>: // ==IEEE: dpi_import_export
|
||||||
$5->dpiImport(true); $5->dpiTask(true); GRAMMARP->checkDpiVer($1,*$2); v3Global.dpi(true);
|
$5->dpiImport(true); $5->dpiTask(true); GRAMMARP->checkDpiVer($1,*$2); v3Global.dpi(true);
|
||||||
if ($$->prettyName()[0]=='$') SYMP->reinsert($$,NULL,$$->prettyName()); // For $SysTF overriding
|
if ($$->prettyName()[0]=='$') SYMP->reinsert($$,NULL,$$->prettyName()); // For $SysTF overriding
|
||||||
SYMP->reinsert($$); }
|
SYMP->reinsert($$); }
|
||||||
| yEXPORT yaSTRING dpi_importLabelE yFUNCTION idAny ';' { $$ = new AstDpiExport($1,*$5,*$3);
|
| yEXPORT yaSTRING dpi_importLabelE yFUNCTION idAny ';' { $$ = new AstDpiExport($<fl>5, *$5, *$3);
|
||||||
GRAMMARP->checkDpiVer($1,*$2); v3Global.dpi(true); }
|
GRAMMARP->checkDpiVer($1,*$2); v3Global.dpi(true); }
|
||||||
| yEXPORT yaSTRING dpi_importLabelE yTASK idAny ';' { $$ = new AstDpiExport($1,*$5,*$3);
|
| yEXPORT yaSTRING dpi_importLabelE yTASK idAny ';' { $$ = new AstDpiExport($<fl>5, *$5, *$3);
|
||||||
GRAMMARP->checkDpiVer($1,*$2); v3Global.dpi(true); }
|
GRAMMARP->checkDpiVer($1,*$2); v3Global.dpi(true); }
|
||||||
;
|
;
|
||||||
|
|
||||||
|
|
@ -3281,7 +3291,7 @@ expr<nodep>: // IEEE: part of expression/constant_expression/primary
|
||||||
// // Part of exprOkLvalue below
|
// // Part of exprOkLvalue below
|
||||||
//
|
//
|
||||||
// // IEEE: multiple_concatenation/constant_multiple_concatenation
|
// // IEEE: multiple_concatenation/constant_multiple_concatenation
|
||||||
| '{' constExpr '{' cateList '}' '}' { $$ = new AstReplicate($1,$4,$2); }
|
| '{' constExpr '{' cateList '}' '}' { $$ = new AstReplicate($3, $4, $2); }
|
||||||
//
|
//
|
||||||
| function_subroutine_callNoMethod { $$ = $1; }
|
| function_subroutine_callNoMethod { $$ = $1; }
|
||||||
// // method_call
|
// // method_call
|
||||||
|
|
@ -3299,7 +3309,7 @@ expr<nodep>: // IEEE: part of expression/constant_expression/primary
|
||||||
| '_' '(' expr ')' { $$ = $3; } // Arbitrary Verilog inside PSL
|
| '_' '(' expr ')' { $$ = $3; } // Arbitrary Verilog inside PSL
|
||||||
//
|
//
|
||||||
// // IEEE: cast/constant_cast
|
// // IEEE: cast/constant_cast
|
||||||
| casting_type yP_TICK '(' expr ')' { $$ = new AstCast($2,$4,$1); }
|
| casting_type yP_TICK '(' expr ')' { $$ = new AstCast($1->fileline(), $4, $1); }
|
||||||
// // expanded from casting_type
|
// // expanded from casting_type
|
||||||
| ySIGNED yP_TICK '(' expr ')' { $$ = new AstSigned($1,$4); }
|
| ySIGNED yP_TICK '(' expr ')' { $$ = new AstSigned($1,$4); }
|
||||||
| yUNSIGNED yP_TICK '(' expr ')' { $$ = new AstUnsigned($1,$4); }
|
| yUNSIGNED yP_TICK '(' expr ')' { $$ = new AstUnsigned($1,$4); }
|
||||||
|
|
@ -3460,7 +3470,7 @@ argsExprListE<nodep>: // IEEE: part of list_of_arguments
|
||||||
|
|
||||||
argsExprOneE<nodep>: // IEEE: part of list_of_arguments
|
argsExprOneE<nodep>: // IEEE: part of list_of_arguments
|
||||||
/*empty*/ { $$ = new AstArg(CRELINE(), "", NULL); }
|
/*empty*/ { $$ = new AstArg(CRELINE(), "", NULL); }
|
||||||
| expr { $$ = new AstArg(CRELINE(), "", $1); }
|
| expr { $$ = new AstArg($1->fileline(), "", $1); }
|
||||||
;
|
;
|
||||||
|
|
||||||
argsDottedList<nodep>: // IEEE: part of list_of_arguments
|
argsDottedList<nodep>: // IEEE: part of list_of_arguments
|
||||||
|
|
@ -3469,8 +3479,8 @@ argsDottedList<nodep>: // IEEE: part of list_of_arguments
|
||||||
;
|
;
|
||||||
|
|
||||||
argsDotted<nodep>: // IEEE: part of list_of_arguments
|
argsDotted<nodep>: // IEEE: part of list_of_arguments
|
||||||
'.' idAny '(' ')' { $$ = new AstArg($1,*$2,NULL); }
|
'.' idAny '(' ')' { $$ = new AstArg($<fl>2, *$2, NULL); }
|
||||||
| '.' idAny '(' expr ')' { $$ = new AstArg($1,*$2,$4); }
|
| '.' idAny '(' expr ')' { $$ = new AstArg($<fl>2, *$2, $4); }
|
||||||
;
|
;
|
||||||
|
|
||||||
streaming_concatenation<nodep>: // ==IEEE: streaming_concatenation
|
streaming_concatenation<nodep>: // ==IEEE: streaming_concatenation
|
||||||
|
|
@ -3481,10 +3491,10 @@ streaming_concatenation<nodep>: // ==IEEE: streaming_concatenation
|
||||||
// // IEEE: "'{' yP_SL/R stream_concatenation '}'"
|
// // IEEE: "'{' yP_SL/R stream_concatenation '}'"
|
||||||
// // IEEE: "'{' yP_SL/R simple_type stream_concatenation '}'"
|
// // IEEE: "'{' yP_SL/R simple_type stream_concatenation '}'"
|
||||||
// // IEEE: "'{' yP_SL/R constExpr stream_concatenation '}'"
|
// // IEEE: "'{' yP_SL/R constExpr stream_concatenation '}'"
|
||||||
'{' yP_SLEFT stream_concOrExprOrType '}' { $$ = new AstStreamL($1, $3, new AstConst($1,1)); }
|
'{' yP_SLEFT stream_concOrExprOrType '}' { $$ = new AstStreamL($2, $3, new AstConst($2,1)); }
|
||||||
| '{' yP_SRIGHT stream_concOrExprOrType '}' { $$ = new AstStreamR($1, $3, new AstConst($1,1)); }
|
| '{' yP_SRIGHT stream_concOrExprOrType '}' { $$ = new AstStreamR($2, $3, new AstConst($2,1)); }
|
||||||
| '{' yP_SLEFT stream_concOrExprOrType stream_concatenation '}' { $$ = new AstStreamL($1, $4, $3); }
|
| '{' yP_SLEFT stream_concOrExprOrType stream_concatenation '}' { $$ = new AstStreamL($2, $4, $3); }
|
||||||
| '{' yP_SRIGHT stream_concOrExprOrType stream_concatenation '}' { $$ = new AstStreamR($1, $4, $3); }
|
| '{' yP_SRIGHT stream_concOrExprOrType stream_concatenation '}' { $$ = new AstStreamR($2, $4, $3); }
|
||||||
;
|
;
|
||||||
|
|
||||||
stream_concOrExprOrType<nodep>: // IEEE: stream_concatenation | slice_size:simple_type | slice_size:constExpr
|
stream_concOrExprOrType<nodep>: // IEEE: stream_concatenation | slice_size:simple_type | slice_size:constExpr
|
||||||
|
|
@ -3607,66 +3617,67 @@ gateRangeE<nodep>:
|
||||||
;
|
;
|
||||||
|
|
||||||
gateBuf<nodep>:
|
gateBuf<nodep>:
|
||||||
gateIdE gateRangeE '(' variable_lvalue ',' gatePinExpr ')'
|
gateFront variable_lvalue ',' gatePinExpr ')'
|
||||||
{ $$ = new AstAssignW($3,$4,$6); DEL($2); }
|
{ $$ = new AstAssignW($<fl>1, $2, $4); DEL($1); }
|
||||||
;
|
;
|
||||||
gateBufif0<nodep>:
|
gateBufif0<nodep>:
|
||||||
gateIdE gateRangeE '(' variable_lvalue ',' gatePinExpr ',' gatePinExpr ')'
|
gateFront variable_lvalue ',' gatePinExpr ',' gatePinExpr ')'
|
||||||
{ $$ = new AstAssignW($3,$4,new AstBufIf1($3,new AstNot($3,$8),$6)); DEL($2); }
|
{ $$ = new AstAssignW($<fl>1, $2, new AstBufIf1($<fl>1, new AstNot($<fl>1, $6), $4)); DEL($1); }
|
||||||
;
|
;
|
||||||
gateBufif1<nodep>:
|
gateBufif1<nodep>:
|
||||||
gateIdE gateRangeE '(' variable_lvalue ',' gatePinExpr ',' gatePinExpr ')'
|
gateFront variable_lvalue ',' gatePinExpr ',' gatePinExpr ')'
|
||||||
{ $$ = new AstAssignW($3,$4,new AstBufIf1($3,$8,$6)); DEL($2); }
|
{ $$ = new AstAssignW($<fl>1, $2, new AstBufIf1($<fl>1, $6, $4)); DEL($1); }
|
||||||
;
|
;
|
||||||
gateNot<nodep>:
|
gateNot<nodep>:
|
||||||
gateIdE gateRangeE '(' variable_lvalue ',' gatePinExpr ')'
|
gateFront variable_lvalue ',' gatePinExpr ')'
|
||||||
{ $$ = new AstAssignW($3,$4,new AstNot($5,$6)); DEL($2); }
|
{ $$ = new AstAssignW($<fl>1, $2, new AstNot($<fl>1, $4)); DEL($1); }
|
||||||
;
|
;
|
||||||
gateNotif0<nodep>:
|
gateNotif0<nodep>:
|
||||||
gateIdE gateRangeE '(' variable_lvalue ',' gatePinExpr ',' gatePinExpr ')'
|
gateFront variable_lvalue ',' gatePinExpr ',' gatePinExpr ')'
|
||||||
{ $$ = new AstAssignW($3,$4,new AstBufIf1($3,new AstNot($3,$8), new AstNot($3, $6))); DEL($2); }
|
{ $$ = new AstAssignW($<fl>1, $2, new AstBufIf1($<fl>1, new AstNot($<fl>1, $6),
|
||||||
|
new AstNot($<fl>1, $4))); DEL($1); }
|
||||||
;
|
;
|
||||||
gateNotif1<nodep>:
|
gateNotif1<nodep>:
|
||||||
gateIdE gateRangeE '(' variable_lvalue ',' gatePinExpr ',' gatePinExpr ')'
|
gateFront variable_lvalue ',' gatePinExpr ',' gatePinExpr ')'
|
||||||
{ $$ = new AstAssignW($3,$4,new AstBufIf1($3,$8, new AstNot($3,$6))); DEL($2); }
|
{ $$ = new AstAssignW($<fl>1, $2, new AstBufIf1($<fl>1, $6, new AstNot($<fl>1, $4))); DEL($1); }
|
||||||
;
|
;
|
||||||
gateAnd<nodep>:
|
gateAnd<nodep>:
|
||||||
gateIdE gateRangeE '(' variable_lvalue ',' gateAndPinList ')'
|
gateFront variable_lvalue ',' gateAndPinList ')'
|
||||||
{ $$ = new AstAssignW($3,$4,$6); DEL($2); }
|
{ $$ = new AstAssignW($<fl>1, $2, $4); DEL($1); }
|
||||||
;
|
;
|
||||||
gateNand<nodep>:
|
gateNand<nodep>:
|
||||||
gateIdE gateRangeE '(' variable_lvalue ',' gateAndPinList ')'
|
gateFront variable_lvalue ',' gateAndPinList ')'
|
||||||
{ $$ = new AstAssignW($3,$4,new AstNot($5,$6)); DEL($2); }
|
{ $$ = new AstAssignW($<fl>1, $2, new AstNot($<fl>1, $4)); DEL($1); }
|
||||||
;
|
;
|
||||||
gateOr<nodep>:
|
gateOr<nodep>:
|
||||||
gateIdE gateRangeE '(' variable_lvalue ',' gateOrPinList ')'
|
gateFront variable_lvalue ',' gateOrPinList ')'
|
||||||
{ $$ = new AstAssignW($3,$4,$6); DEL($2); }
|
{ $$ = new AstAssignW($<fl>1, $2, $4); DEL($1); }
|
||||||
;
|
;
|
||||||
gateNor<nodep>:
|
gateNor<nodep>:
|
||||||
gateIdE gateRangeE '(' variable_lvalue ',' gateOrPinList ')'
|
gateFront variable_lvalue ',' gateOrPinList ')'
|
||||||
{ $$ = new AstAssignW($3,$4,new AstNot($5,$6)); DEL($2); }
|
{ $$ = new AstAssignW($<fl>1, $2, new AstNot($<fl>1, $4)); DEL($1); }
|
||||||
;
|
;
|
||||||
gateXor<nodep>:
|
gateXor<nodep>:
|
||||||
gateIdE gateRangeE '(' variable_lvalue ',' gateXorPinList ')'
|
gateFront variable_lvalue ',' gateXorPinList ')'
|
||||||
{ $$ = new AstAssignW($3,$4,$6); DEL($2); }
|
{ $$ = new AstAssignW($<fl>1, $2, $4); DEL($1); }
|
||||||
;
|
;
|
||||||
gateXnor<nodep>:
|
gateXnor<nodep>:
|
||||||
gateIdE gateRangeE '(' variable_lvalue ',' gateXorPinList ')'
|
gateFront variable_lvalue ',' gateXorPinList ')'
|
||||||
{ $$ = new AstAssignW($3,$4,new AstNot($5,$6)); DEL($2); }
|
{ $$ = new AstAssignW($<fl>1, $2, new AstNot($<fl>1, $4)); DEL($1); }
|
||||||
;
|
;
|
||||||
gatePullup<nodep>:
|
gatePullup<nodep>:
|
||||||
gateIdE gateRangeE '(' variable_lvalue ')' { $$ = new AstPull($3, $4, true); DEL($2); }
|
gateFront variable_lvalue ')' { $$ = new AstPull($<fl>1, $2, true); DEL($1); }
|
||||||
;
|
;
|
||||||
gatePulldown<nodep>:
|
gatePulldown<nodep>:
|
||||||
gateIdE gateRangeE '(' variable_lvalue ')' { $$ = new AstPull($3, $4, false); DEL($2); }
|
gateFront variable_lvalue ')' { $$ = new AstPull($<fl>1, $2, false); DEL($1); }
|
||||||
;
|
;
|
||||||
gateUnsup<nodep>:
|
gateUnsup<nodep>:
|
||||||
gateIdE gateRangeE '(' gateUnsupPinList ')' { $$ = new AstImplicit($3,$4); DEL($2); }
|
gateFront gateUnsupPinList ')' { $$ = new AstImplicit($<fl>1, $2); DEL($1); }
|
||||||
;
|
;
|
||||||
|
|
||||||
gateIdE:
|
gateFront<nodep>:
|
||||||
/*empty*/ {}
|
id/*gate*/ gateRangeE '(' { $$ = $2; $<fl>$ = $<fl>1; }
|
||||||
| id {}
|
| gateRangeE '(' { $$ = $1; $<fl>$ = $<fl>2; }
|
||||||
;
|
;
|
||||||
|
|
||||||
gateAndPinList<nodep>:
|
gateAndPinList<nodep>:
|
||||||
|
|
@ -3874,7 +3885,7 @@ endLabelE<strp>:
|
||||||
|
|
||||||
clocking_declaration<nodep>: // IEEE: clocking_declaration (INCOMPLETE)
|
clocking_declaration<nodep>: // IEEE: clocking_declaration (INCOMPLETE)
|
||||||
yDEFAULT yCLOCKING '@' '(' senitemEdge ')' ';' yENDCLOCKING
|
yDEFAULT yCLOCKING '@' '(' senitemEdge ')' ';' yENDCLOCKING
|
||||||
{ $$ = new AstClocking($1, $5, NULL); }
|
{ $$ = new AstClocking($2, $5, NULL); }
|
||||||
//UNSUP: Vastly simplified grammar
|
//UNSUP: Vastly simplified grammar
|
||||||
;
|
;
|
||||||
|
|
||||||
|
|
@ -3889,7 +3900,7 @@ assertion_item<nodep>: // ==IEEE: assertion_item
|
||||||
deferred_immediate_assertion_item<nodep>: // ==IEEE: deferred_immediate_assertion_item
|
deferred_immediate_assertion_item<nodep>: // ==IEEE: deferred_immediate_assertion_item
|
||||||
deferred_immediate_assertion_statement { $$ = $1; }
|
deferred_immediate_assertion_statement { $$ = $1; }
|
||||||
| id/*block_identifier*/ ':' deferred_immediate_assertion_statement
|
| id/*block_identifier*/ ':' deferred_immediate_assertion_statement
|
||||||
{ $$ = new AstBegin($2, *$1, $3); }
|
{ $$ = new AstBegin($<fl>1, *$1, $3); }
|
||||||
;
|
;
|
||||||
|
|
||||||
procedural_assertion_statement<nodep>: // ==IEEE: procedural_assertion_statement
|
procedural_assertion_statement<nodep>: // ==IEEE: procedural_assertion_statement
|
||||||
|
|
@ -3940,7 +3951,7 @@ deferred_immediate_assertion_statement<nodep>: // ==IEEE: deferred_immediate_ass
|
||||||
|
|
||||||
concurrent_assertion_item<nodep>: // IEEE: concurrent_assertion_item
|
concurrent_assertion_item<nodep>: // IEEE: concurrent_assertion_item
|
||||||
concurrent_assertion_statement { $$ = $1; }
|
concurrent_assertion_statement { $$ = $1; }
|
||||||
| id/*block_identifier*/ ':' concurrent_assertion_statement { $$ = new AstBegin($2,*$1,$3); }
|
| id/*block_identifier*/ ':' concurrent_assertion_statement { $$ = new AstBegin($<fl>1, *$1, $3); }
|
||||||
// // IEEE: checker_instantiation
|
// // IEEE: checker_instantiation
|
||||||
// // identical to module_instantiation; see etcInst
|
// // identical to module_instantiation; see etcInst
|
||||||
;
|
;
|
||||||
|
|
|
||||||
|
|
@ -20,7 +20,7 @@
|
||||||
<var fl="d13" name="clk_ip" tag="clk_ip" dtype_id="1" dir="input" vartype="logic" origName="clk_ip"/>
|
<var fl="d13" name="clk_ip" tag="clk_ip" dtype_id="1" dir="input" vartype="logic" origName="clk_ip"/>
|
||||||
<var fl="d14" name="rst_ip" dtype_id="1" dir="input" vartype="logic" origName="rst_ip"/>
|
<var fl="d14" name="rst_ip" dtype_id="1" dir="input" vartype="logic" origName="rst_ip"/>
|
||||||
<var fl="d15" name="foo_op" tag="foo_op" dtype_id="1" dir="output" vartype="logic" origName="foo_op"/>
|
<var fl="d15" name="foo_op" tag="foo_op" dtype_id="1" dir="output" vartype="logic" origName="foo_op"/>
|
||||||
<typedef fl="d19" name="my_struct" tag="my_struct" dtype_id="2"/>
|
<typedef fl="d24" name="my_struct" tag="my_struct" dtype_id="2"/>
|
||||||
<instance fl="d28" name="itop" defName="ifc" origName="itop"/>
|
<instance fl="d28" name="itop" defName="ifc" origName="itop"/>
|
||||||
<var fl="d28" name="itop__Viftop" dtype_id="3" vartype="ifaceref" origName="itop__Viftop"/>
|
<var fl="d28" name="itop__Viftop" dtype_id="3" vartype="ifaceref" origName="itop__Viftop"/>
|
||||||
<var fl="d30" name="this_struct" tag="this_struct" dtype_id="4" vartype="" origName="this_struct"/>
|
<var fl="d30" name="this_struct" tag="this_struct" dtype_id="4" vartype="" origName="this_struct"/>
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue