From a77e331e8924b644e23b370a7eeb27f00f9c4428 Mon Sep 17 00:00:00 2001 From: Wilson Snyder Date: Sat, 12 May 2007 16:29:25 +0000 Subject: [PATCH] Standardize flex->bison token names. No functional change. git-svn-id: file://localhost/svn/verilator/trunk/verilator@920 77ca24e4-aefa-0310-84f0-b9a241c72d87 --- src/verilog.l | 118 ++++++++--------- src/verilog.y | 359 ++++++++++++++++++++++++++++---------------------- 2 files changed, 259 insertions(+), 218 deletions(-) diff --git a/src/verilog.l b/src/verilog.l index ff1e3e69e..65c7d2f3f 100644 --- a/src/verilog.l +++ b/src/verilog.l @@ -130,30 +130,30 @@ escid \\[^ \t\f\r\n]+ "$fdisplay" {yylval.fileline = CRELINE(); return yD_FDISPLAY;} "$finish" {yylval.fileline = CRELINE(); return yD_FINISH;} "$fopen" {yylval.fileline = CRELINE(); return yD_FOPEN;} - "$fullskew" {yylval.fileline = CRELINE(); return yTIMINGSPEC;} + "$fullskew" {yylval.fileline = CRELINE(); return yaTIMINGSPEC;} "$fwrite" {yylval.fileline = CRELINE(); return yD_FWRITE;} - "$hold" {yylval.fileline = CRELINE(); return yTIMINGSPEC;} - "$nochange" {yylval.fileline = CRELINE(); return yTIMINGSPEC;} - "$period" {yylval.fileline = CRELINE(); return yTIMINGSPEC;} + "$hold" {yylval.fileline = CRELINE(); return yaTIMINGSPEC;} + "$nochange" {yylval.fileline = CRELINE(); return yaTIMINGSPEC;} + "$period" {yylval.fileline = CRELINE(); return yaTIMINGSPEC;} "$readmemb" {yylval.fileline = CRELINE(); return yD_READMEMB;} "$readmemh" {yylval.fileline = CRELINE(); return yD_READMEMH;} "$realtime" {yylval.fileline = CRELINE(); return yD_TIME;} - "$recovery" {yylval.fileline = CRELINE(); return yTIMINGSPEC;} - "$recrem" {yylval.fileline = CRELINE(); return yTIMINGSPEC;} - "$removal" {yylval.fileline = CRELINE(); return yTIMINGSPEC;} - "$setup" {yylval.fileline = CRELINE(); return yTIMINGSPEC;} - "$setuphold" {yylval.fileline = CRELINE(); return yTIMINGSPEC;} - "$skew" {yylval.fileline = CRELINE(); return yTIMINGSPEC;} + "$recovery" {yylval.fileline = CRELINE(); return yaTIMINGSPEC;} + "$recrem" {yylval.fileline = CRELINE(); return yaTIMINGSPEC;} + "$removal" {yylval.fileline = CRELINE(); return yaTIMINGSPEC;} + "$setup" {yylval.fileline = CRELINE(); return yaTIMINGSPEC;} + "$setuphold" {yylval.fileline = CRELINE(); return yaTIMINGSPEC;} + "$skew" {yylval.fileline = CRELINE(); return yaTIMINGSPEC;} "$stop" {yylval.fileline = CRELINE(); return yD_STOP;} "$time" {yylval.fileline = CRELINE(); return yD_TIME;} - "$timeskew" {yylval.fileline = CRELINE(); return yTIMINGSPEC;} - "$width" {yylval.fileline = CRELINE(); return yTIMINGSPEC;} + "$timeskew" {yylval.fileline = CRELINE(); return yaTIMINGSPEC;} + "$width" {yylval.fileline = CRELINE(); return yaTIMINGSPEC;} "$write" {yylval.fileline = CRELINE(); return yD_WRITE;} /* Keywords */ "always" {yylval.fileline = CRELINE(); return yALWAYS;} "and" {yylval.fileline = CRELINE(); return yAND;} "assign" {yylval.fileline = CRELINE(); return yASSIGN;} - "begin" {yylval.fileline = CRELINE(); return yBBEGIN;} + "begin" {yylval.fileline = CRELINE(); return yBEGIN;} "buf" {yylval.fileline = CRELINE(); return yBUF;} "case" {yylval.fileline = CRELINE(); return yCASE;} "casex" {yylval.fileline = CRELINE(); return yCASEX;} @@ -161,7 +161,7 @@ escid \\[^ \t\f\r\n]+ "default" {yylval.fileline = CRELINE(); return yDEFAULT;} "defparam" {yylval.fileline = CRELINE(); return yDEFPARAM;} "else" {yylval.fileline = CRELINE(); return yELSE;} - "end" {yylval.fileline = CRELINE(); return yBEND;} + "end" {yylval.fileline = CRELINE(); return yEND;} "endcase" {yylval.fileline = CRELINE(); return yENDCASE;} "endfunction" {yylval.fileline = CRELINE(); return yENDFUNCTION;} "endmodule" {yylval.fileline = CRELINE(); return yENDMODULE;} @@ -187,7 +187,7 @@ escid \\[^ \t\f\r\n]+ "reg" {yylval.fileline = CRELINE(); return yREG;} "scalared" {yylval.fileline = CRELINE(); return ySCALARED;} "specify" {yylval.fileline = CRELINE(); return ySPECIFY;} - "specparam" {yylval.fileline = CRELINE(); return yTIMINGSPEC;} + "specparam" {yylval.fileline = CRELINE(); return yaTIMINGSPEC;} "supply0" {yylval.fileline = CRELINE(); return ySUPPLY0;} "supply1" {yylval.fileline = CRELINE(); return ySUPPLY1;} "task" {yylval.fileline = CRELINE(); return yTASK;} @@ -552,45 +552,45 @@ escid \\[^ \t\f\r\n]+ /* Verilog 1995 Operators */ { - "&&" {yylval.fileline = CRELINE(); return yANDAND;} - "||" {yylval.fileline = CRELINE(); return yOROR;} - "<=" {yylval.fileline = CRELINE(); return yLTE;} - ">=" {yylval.fileline = CRELINE(); return yGTE;} - "<<" {yylval.fileline = CRELINE(); return ySLEFT;} - ">>" {yylval.fileline = CRELINE(); return ySRIGHT;} - "==" {yylval.fileline = CRELINE(); return yEQUAL;} - "!=" {yylval.fileline = CRELINE(); return yNOTEQUAL;} - "===" {yylval.fileline = CRELINE(); return yCASEEQUAL;} - "!==" {yylval.fileline = CRELINE(); return yCASENOTEQUAL;} - "^~" {yylval.fileline = CRELINE(); return yOP_XNOR;} - "~^" {yylval.fileline = CRELINE(); return yOP_XNOR;} - "~&" {yylval.fileline = CRELINE(); return yOP_NAND;} - "~|" {yylval.fileline = CRELINE(); return yOP_NOR;} + "&&" {yylval.fileline = CRELINE(); return yP_ANDAND;} + "||" {yylval.fileline = CRELINE(); return yP_OROR;} + "<=" {yylval.fileline = CRELINE(); return yP_LTE;} + ">=" {yylval.fileline = CRELINE(); return yP_GTE;} + "<<" {yylval.fileline = CRELINE(); return yP_SLEFT;} + ">>" {yylval.fileline = CRELINE(); return yP_SRIGHT;} + "==" {yylval.fileline = CRELINE(); return yP_EQUAL;} + "!=" {yylval.fileline = CRELINE(); return yP_NOTEQUAL;} + "===" {yylval.fileline = CRELINE(); return yP_CASEEQUAL;} + "!==" {yylval.fileline = CRELINE(); return yP_CASENOTEQUAL;} + "^~" {yylval.fileline = CRELINE(); return yP_XNOR;} + "~^" {yylval.fileline = CRELINE(); return yP_XNOR;} + "~&" {yylval.fileline = CRELINE(); return yP_NAND;} + "~|" {yylval.fileline = CRELINE(); return yP_NOR;} } /* Verilog 2001 Operators */ { - "<<<" {yylval.fileline = CRELINE(); return ySLEFT;} - ">>>" {yylval.fileline = CRELINE(); return ySSRIGHT;} - "**" {yylval.fileline = CRELINE(); return yPOW;} - "+:" {yylval.fileline = CRELINE(); return yPLUSCOLON;} - "-:" {yylval.fileline = CRELINE(); return yMINUSCOLON;} + "<<<" {yylval.fileline = CRELINE(); return yP_SLEFT;} + ">>>" {yylval.fileline = CRELINE(); return yP_SSRIGHT;} + "**" {yylval.fileline = CRELINE(); return yP_POW;} + "+:" {yylval.fileline = CRELINE(); return yP_PLUSCOLON;} + "-:" {yylval.fileline = CRELINE(); return yP_MINUSCOLON;} } /* PSL Operators */ { "{" {yylval.fileline = CRELINE(); return yPSL_BRA;} // Avoid parser hitting concatenate. "}" {yylval.fileline = CRELINE(); return yPSL_KET;} // Avoid parser hitting concatenate. - "->" {yylval.fileline = CRELINE(); return yOP_LOGIF;} + "->" {yylval.fileline = CRELINE(); return yP_LOGIF;} "<->" {yyerrorf("Unsupported: PSL operator not implemented: %s",yytext);} //Unsup in other tools - "[*" {yyerrorf("Unsupported: PSL operator not implemented: %s",yytext);} // yBRA_STAR - "[*]" {yyerrorf("Unsupported: PSL operator not implemented: %s",yytext);} // yBRA_STAR_KET - "[+]" {yyerrorf("Unsupported: PSL operator not implemented: %s",yytext);} // yBRA_PLUS_KET - "[->" {yyerrorf("Unsupported: PSL operator not implemented: %s",yytext);} // yBRA_MINUS_GT - "[->]" {yyerrorf("Unsupported: PSL operator not implemented: %s",yytext);} // yBRA_MINUS_GT_KET - "[=" {yyerrorf("Unsupported: PSL operator not implemented: %s",yytext);} // yBRA_EQ - "|->" {yyerrorf("Unsupported: PSL operator not implemented: %s",yytext);} // yOR_MINUS_GT - "|=>" {yyerrorf("Unsupported: PSL operator not implemented: %s",yytext);} // yOR_EQ_GT + "[*" {yyerrorf("Unsupported: PSL operator not implemented: %s",yytext);} // yP_BRA_STAR + "[*]" {yyerrorf("Unsupported: PSL operator not implemented: %s",yytext);} // yP_BRA_STAR_KET + "[+]" {yyerrorf("Unsupported: PSL operator not implemented: %s",yytext);} // yP_BRA_PLUS_KET + "[->" {yyerrorf("Unsupported: PSL operator not implemented: %s",yytext);} // yP_BRA_MINUS_GT + "[->]" {yyerrorf("Unsupported: PSL operator not implemented: %s",yytext);} // yP_BRA_MINUS_GT_KET + "[=" {yyerrorf("Unsupported: PSL operator not implemented: %s",yytext);} // yP_BRA_EQ + "|->" {yyerrorf("Unsupported: PSL operator not implemented: %s",yytext);} // yP_OR_MINUS_GT + "|=>" {yyerrorf("Unsupported: PSL operator not implemented: %s",yytext);} // yP_OR_EQ_GT } /* Identifiers and numbers */ @@ -604,41 +604,41 @@ escid \\[^ \t\f\r\n]+ } else { yylval.strp = V3Read::newString(yytext); // Need _ as "6..." isn't legal ID } - return yID; + return yaID; } {id} { yylval.strp = V3Read::newString(yytext); - return yID; + return yaID; } \"[^\"\\]*\" { yylval.strp = V3Read::newString(yytext+1,yyleng-2); - return ySTRING; + return yaSTRING; } \" { yy_push_state(STRING); yymore(); } [0-9]*?['']s?[bcodhBCODH][ \t]*[A-Fa-f0-9xXzZ_?]* { yylval.nump = V3Read::newNumber(V3Read::fileline(),(char*)yytext); - return yINTNUM; + return yaINTNUM; } [0-9]*?['']s?[01xXzZ] { /* SystemVerilog */ yylval.nump = V3Read::newNumber(V3Read::fileline(),(char*)yytext); - return yINTNUM; + return yaINTNUM; } [0-9]+[_0-9]*[ \t]*['']s?[bcodhBCODH]?[ \t]*[A-Fa-f0-9xXzZ_?]* { yylval.nump = V3Read::newNumber(V3Read::fileline(),(char*)yytext); - return yINTNUM; + return yaINTNUM; } [0-9]* { yylval.nump = V3Read::newNumber(V3Read::fileline(),(char*)yytext); - return yINTNUM; + return yaINTNUM; } [-+]?[0-9]+(\.[0-9]+)([eE][-+]?[0-9]+)? { yylval.cdouble = 0; /* Only for delays, not used yet */ - return yFLOATNUM; + return yaFLOATNUM; } [-+]?[0-9]+(\.[0-9]+)?([eE][-+]?[0-9]+) { yylval.cdouble = 0; /* Only for delays, not used yet */ - return yFLOATNUM; + return yaFLOATNUM; } "`timescale"{ws}+[^\n]* {} @@ -653,7 +653,7 @@ escid \\[^ \t\f\r\n]+ \\. { yymore(); } \" { yy_pop_state(); yylval.strp = V3Read::newString(yytext+1,yyleng-2); - return ySTRING; } + return yaSTRING; } /************************************************************************/ /* Common for all SYSC header states */ @@ -678,12 +678,12 @@ escid \\[^ \t\f\r\n]+ "`line"[ \t][^\n]*\n {V3Read::ppline(yytext);} } -[ \t]*[^` \t\n][^\n]*\n { NEXTLINE(); yylval.strp = V3Read::newString(yytext); return ySCHDR;} -[ \t]*[^` \t\n][^\n]*\n { NEXTLINE(); yylval.strp = V3Read::newString(yytext); return ySCINT;} -[ \t]*[^` \t\n][^\n]*\n { NEXTLINE(); yylval.strp = V3Read::newString(yytext); return ySCIMP;} -[ \t]*[^` \t\n][^\n]*\n { NEXTLINE(); yylval.strp = V3Read::newString(yytext); return ySCIMPH;} -[ \t]*[^` \t\n][^\n]*\n { NEXTLINE(); yylval.strp = V3Read::newString(yytext); return ySCCTOR;} -[ \t]*[^` \t\n][^\n]*\n { NEXTLINE(); yylval.strp = V3Read::newString(yytext); return ySCDTOR;} +[ \t]*[^` \t\n][^\n]*\n { NEXTLINE(); yylval.strp = V3Read::newString(yytext); return yaSCHDR;} +[ \t]*[^` \t\n][^\n]*\n { NEXTLINE(); yylval.strp = V3Read::newString(yytext); return yaSCINT;} +[ \t]*[^` \t\n][^\n]*\n { NEXTLINE(); yylval.strp = V3Read::newString(yytext); return yaSCIMP;} +[ \t]*[^` \t\n][^\n]*\n { NEXTLINE(); yylval.strp = V3Read::newString(yytext); return yaSCIMPH;} +[ \t]*[^` \t\n][^\n]*\n { NEXTLINE(); yylval.strp = V3Read::newString(yytext); return yaSCCTOR;} +[ \t]*[^` \t\n][^\n]*\n { NEXTLINE(); yylval.strp = V3Read::newString(yytext); return yaSCDTOR;} [ \t]*[^` \t\n][^\n]*\n { NEXTLINE(); } /* Pick up text-type data */ diff --git a/src/verilog.y b/src/verilog.y index 40fc58d58..0f8613b68 100644 --- a/src/verilog.y +++ b/src/verilog.y @@ -63,7 +63,7 @@ public: static AstText* createTextQuoted(FileLine* fileline, string text); static AstDisplay* createDisplayError(FileLine* fileline) { AstDisplay* nodep = new AstDisplay(fileline,AstDisplayType::ERROR, "", NULL,NULL); - nodep->addNext(new AstStop(fileline)); + nodep->addNext(new AstStop(fileline)); return nodep; } static string deQuote(FileLine* fileline, string text); @@ -124,31 +124,83 @@ class AstSenTree; AstVarRef* varrefp; } -%token yINTNUM -%token yFLOATNUM -%token yID ySTRING -%token ySCHDR ySCINT ySCIMP ySCIMPH ySCCTOR ySCDTOR -%token yMODULE yENDMODULE yALWAYS yINITIAL yPOSEDGE yNEGEDGE yBBEGIN yBEND yOR -%token yINPUT yOUTPUT yINOUT yWIRE yTRI yREG yPARAM yLOCALPARAM yDEFPARAM -%token yFUNCTION yENDFUNCTION yTASK yENDTASK -%token yGENVAR yGENERATE yENDGENERATE -%token ySPECIFY yENDSPECIFY yTIMINGSPEC -%token yCASE yCASEX yCASEZ yDEFAULT yENDCASE yIF yELSE -%token yASSIGN yINTEGER yFOR ySUPPLY0 ySUPPLY1 ySIGNED yUNSIGNED -%token yBUF yNOT yAND yNAND yNOR yXOR yXNOR -%token ySCALARED yVECTORED +// Generic lexer tokens, for example a number +%token yaFLOATNUM "FLOATING-POINT NUMBER" +%token yaTIMINGSPEC "TIMING SPEC ELEMENT" +%token yaINTNUM "INTEGER NUMBER" +%token yaID "IDENTIFIER" +%token yaSTRING "STRING" +%token yaSCHDR "`systemc_header BLOCK" +%token yaSCINT "`systemc_ctor BLOCK" +%token yaSCIMP "`systemc_dtor BLOCK" +%token yaSCIMPH "`systemc_interface BLOCK" +%token yaSCCTOR "`systemc_implementation BLOCK" +%token yaSCDTOR "`systemc_imp_header BLOCK" + +// Specific keywords +// yKEYWORD means match "keyword" +// Other cases are yXX_KEYWORD where XX makes it unique, +// for example yP_ for punctuation based operators. +%token yALWAYS "always" +%token yAND "and" %token yASSERT "assert" +%token yASSIGN "assign" +%token yBEGIN "begin" +%token yBUF "buf" +%token yCASE "case" +%token yCASEX "casex" +%token yCASEZ "casez" %token yCLOCK "clock" %token yCOVER "cover" +%token yDEFAULT "default" +%token yDEFPARAM "defparam" %token yDO "do" +%token yELSE "else" +%token yEND "bend" +%token yENDCASE "endcase" +%token yENDFUNCTION "endfunction" +%token yENDGENERATE "endgenerate" +%token yENDMODULE "endmodule" +%token yENDSPECIFY "endspecify" +%token yENDTASK "endtask" %token yFINAL "final" +%token yFOR "for" +%token yFUNCTION "function" +%token yGENERATE "generate" +%token yGENVAR "genvar" +%token yIF "if" +%token yINITIAL "initial" +%token yINOUT "inout" +%token yINPUT "input" +%token yINTEGER "integer" +%token yLOCALPARAM "localparam" +%token yMODULE "module" +%token yNAND "nand" +%token yNEGEDGE "negedge" +%token yNOR "nor" +%token yNOT "not" +%token yOR "or" +%token yOUTPUT "output" +%token yPARAM "param" +%token yPOSEDGE "posedge" %token yPSL "psl" +%token yREG "reg" %token yREPORT "report" +%token ySCALARED "scalared" +%token ySIGNED "signed" +%token ySPECIFY "specify" +%token ySUPPLY0 "supply0" +%token ySUPPLY1 "supply1" +%token yTASK "task" +%token yTRI "tri" %token yTRUE "true" +%token yUNSIGNED "unsigned" +%token yVECTORED "vectored" %token yWHILE "while" - -%token yPSL_ASSERT "PSL assert" +%token yWIRE "wire" +%token yXNOR "xnor" +%token yXOR "xor" %token yD_BITS "$bits" %token yD_C "$c" @@ -174,56 +226,58 @@ class AstSenTree; %token yD_WARNING "$warning" %token yD_WRITE "$write" +%token yPSL_ASSERT "PSL assert" + %token yVL_CLOCK "/*verilator sc_clock*/" %token yVL_CLOCK_ENABLE "/*verilator clock_enable*/" %token yVL_COVER_OFF "/*verilator coverage_block_off*/" %token yVL_FULL_CASE "/*verilator full_case*/" %token yVL_INLINE_MODULE "/*verilator inline_module*/" +%token yVL_ISOLATE_ASSIGNMENTS "/*verilator isolate_assignments*/" %token yVL_NO_INLINE_MODULE "/*verilator no_inline_module*/" %token yVL_NO_INLINE_TASK "/*verilator no_inline_task*/" %token yVL_PARALLEL_CASE "/*verilator parallel_case*/" %token yVL_PUBLIC "/*verilator public*/" %token yVL_PUBLIC_FLAT "/*verilator public_flat*/" %token yVL_PUBLIC_MODULE "/*verilator public_module*/" -%token yVL_ISOLATE_ASSIGNMENTS "/*verilator isolate_assignments*/" %token yVL_TRACING_OFF "/*verilator tracing_off*/" %token yVL_TRACING_ON "/*verilator tracing_on*/" -%token yPLUSCOLON "+:" -%token yMINUSCOLON "-:" -%token yPSL_BRA "{" -%token yPSL_KET "}" +%token yP_PLUSCOLON "+:" +%token yP_MINUSCOLON "-:" + +%token yPSL_BRA "{" +%token yPSL_KET "}" %token ';' '=' ',' '(' '.' '!' '~' '[' '@' //******************** // PSL op precedence -%right yOP_LOGIF yOP_LOGIFF -%right yOR_MINUS_GT yOR_EQ_GT -%left yBRA_STAR yBRA_STAR_KET yBRA_PLUS_KET yBRA_MINUS_GT yBRA_MINUS_GT_KET yBRA_EQ +%right yP_LOGIF yP_LOGIFF +%right yP_OR_MINUS_GT yP_OR_EQ_GT %left prPSLCLK // Verilog op precedence %left ':' %left '?' -%left yOROR -%left yANDAND -%left '|' yOP_NOR +%left yP_OROR +%left yP_ANDAND +%left '|' yP_NOR %left '^' -%left yOP_XNOR -%left '&' yOP_NAND -%left yEQUAL yNOTEQUAL yCASEEQUAL yCASENOTEQUAL -%left '>' '<' yGTE yLTE -%left ySLEFT ySRIGHT ySSRIGHT +%left yP_XNOR +%left '&' yP_NAND +%left yP_EQUAL yP_NOTEQUAL yP_CASEEQUAL yP_CASENOTEQUAL +%left '>' '<' yP_GTE yP_LTE +%left yP_SLEFT yP_SRIGHT yP_SSRIGHT %left '+' '-' %left '*' '/' '%' -%left yPOW +%left yP_POW %left '{' '}' -%left yUNARYARITH -%left yREDUCTION -%left yNEGATION +%left prUNARYARITH +%left prREDUCTION +%left prNEGATION -%nonassoc yLOWER_THAN_ELSE +%nonassoc prLOWER_THAN_ELSE %nonassoc yELSE // Types are in same order as declarations. @@ -283,8 +337,6 @@ class AstSenTree; %% //********************************************************************** -//********************************************************************** -//********************************************************************** // Feedback to the Lexer stateExitPsl: { V3Read::stateExitPsl(); } @@ -294,8 +346,6 @@ statePushVlg: { V3Read::statePushVlg(); } statePop: { V3Read::statePop(); } ; -//********************************************************************** -//********************************************************************** //********************************************************************** // Modules @@ -309,7 +359,7 @@ mod: mheader modParE modportsE ';' modItemListE yENDMODULE ; mheader: yMODULE { V3Parse::s_trace=v3Global.opt.trace();} - yID { $$ = new AstModule($1,*$3); $$->inLibrary(V3Read::inLibrary()); + yaID { $$ = new AstModule($1,*$3); $$->inLibrary(V3Read::inLibrary()); $$->modTrace(v3Global.opt.trace()); V3Read::rootp()->addModulep($$); } ; @@ -334,7 +384,7 @@ portList: port { $$ = $1; } | portList ',' port { $$ = $1->addNext($3); } ; -port: yID portrangeE { $$ = new AstPort(CRELINE(),V3Parse::s_pinNum++,*$1); } +port: yaID portrangeE { $$ = new AstPort(CRELINE(),V3Parse::s_pinNum++,*$1); } ; v2kPortList: v2kPort { $$ = $1; } @@ -417,12 +467,12 @@ modItemList: modItem { $$ = $1; } modItem: modOrGenItem { $$ = $1; } | yGENERATE genTopBlock yENDGENERATE { $$ = new AstGenerate($1, $2); } - | ySCHDR { $$ = new AstScHdr(CRELINE(),*$1); } - | ySCINT { $$ = new AstScInt(CRELINE(),*$1); } - | ySCIMP { $$ = new AstScImp(CRELINE(),*$1); } - | ySCIMPH { $$ = new AstScImpHdr(CRELINE(),*$1); } - | ySCCTOR { $$ = new AstScCtor(CRELINE(),*$1); } - | ySCDTOR { $$ = new AstScDtor(CRELINE(),*$1); } + | yaSCHDR { $$ = new AstScHdr(CRELINE(),*$1); } + | yaSCINT { $$ = new AstScInt(CRELINE(),*$1); } + | yaSCIMP { $$ = new AstScImp(CRELINE(),*$1); } + | yaSCIMPH { $$ = new AstScImpHdr(CRELINE(),*$1); } + | yaSCCTOR { $$ = new AstScCtor(CRELINE(),*$1); } + | yaSCDTOR { $$ = new AstScDtor(CRELINE(),*$1); } | yVL_INLINE_MODULE { $$ = new AstPragma($1,AstPragmaType::INLINE_MODULE); } | yVL_NO_INLINE_MODULE { $$ = new AstPragma($1,AstPragmaType::NO_INLINE_MODULE); } | yVL_PUBLIC_MODULE { $$ = new AstPragma($1,AstPragmaType::PUBLIC_MODULE); } @@ -437,7 +487,7 @@ modOrGenItem: yALWAYS sensitivityE stmtBlock { $$ = new AstAlways($1,$2,$3); } | yINITIAL stmtBlock { $$ = new AstInitial($1,$2); } | yASSIGN delayE assignList ';' { $$ = $3; } | yDEFPARAM defpList ';' { $$ = $2; } - | yID instparamListE {INSTPREP(*$1,$2);} instnameList ';' { $$ = $4; V3Parse::s_impliedDecl=false;} + | yaID instparamListE {INSTPREP(*$1,$2);} instnameList ';' { $$ = $4; V3Parse::s_impliedDecl=false;} | taskDecl { $$ = $1; } | funcDecl { $$ = $1; } | gateDecl { $$ = $1; } @@ -458,10 +508,10 @@ genTopBlock: genItemList { $$ = $1; } | genItemBegin { $$ = $1; } ; -genItemBegin: yBBEGIN genItemList yBEND { $$ = new AstBegin($1,"genblk",$2); } - | yBBEGIN yBEND { $$ = NULL; } - | yBBEGIN ':' yID genItemList yBEND { $$ = new AstBegin($2,*$3,$4); } - | yBBEGIN ':' yID yBEND { $$ = NULL; } +genItemBegin: yBEGIN genItemList yEND { $$ = new AstBegin($1,"genblk",$2); } + | yBEGIN yEND { $$ = NULL; } + | yBEGIN ':' yaID genItemList yEND { $$ = new AstBegin($2,*$3,$4); } + | yBEGIN ':' yaID yEND { $$ = NULL; } ; genItemList: genItem { $$ = $1; } @@ -470,7 +520,7 @@ genItemList: genItem { $$ = $1; } genItem: modOrGenItem { $$ = $1; } | yCASE '(' expr ')' genCaseList yENDCASE { $$ = new AstGenCase($1,$3,$5); } - | yIF expr genItemBlock %prec yLOWER_THAN_ELSE { $$ = new AstGenIf($1,$2,$3,NULL); } + | yIF expr genItemBlock %prec prLOWER_THAN_ELSE { $$ = new AstGenIf($1,$2,$3,NULL); } | yIF expr genItemBlock yELSE genItemBlock { $$ = new AstGenIf($1,$2,$3,$5); } | yFOR '(' varRefBase '=' expr ';' expr ';' varRefBase '=' expr ')' genItemBlock { $$ = new AstGenFor($1, new AstAssign($4,$3,$5) @@ -508,27 +558,27 @@ delayE: /* empty */ | '#' '(' dterm ',' dterm ',' dterm ')' {} /* ignored */ ; -dterm: yID { $$ = NULL; } - | yINTNUM { $$ = NULL; } - | yFLOATNUM { $$ = NULL; } +dterm: yaID { $$ = NULL; } + | yaINTNUM { $$ = NULL; } + | yaFLOATNUM { $$ = NULL; } ; onesig: sigId { $$=$1; } | sigId sigAttrList { $$=$1; } ; -sigId: yID { $$ = V3Parse::createVariable(CRELINE(), *$1, NULL); } +sigId: yaID { $$ = V3Parse::createVariable(CRELINE(), *$1, NULL); } ; -sigIdRange: yID rangeList { $$ = V3Parse::createVariable(CRELINE(), *$1, $2); } +sigIdRange: yaID rangeList { $$ = V3Parse::createVariable(CRELINE(), *$1, $2); } ; -regSigId: yID rangeListE { $$ = V3Parse::createVariable(CRELINE(), *$1, $2); } - | yID rangeListE '=' constExpr { $$ = V3Parse::createVariable(CRELINE(), *$1, $2); +regSigId: yaID rangeListE { $$ = V3Parse::createVariable(CRELINE(), *$1, $2); } + | yaID rangeListE '=' constExpr { $$ = V3Parse::createVariable(CRELINE(), *$1, $2); $$->addNext(new AstInitial($3,new AstAssign($3, new AstVarRef($3, $$, true), $4))); } ; -paramId: yID { $$ = V3Parse::createVariable(CRELINE(), *$1, NULL); } +paramId: yaID { $$ = V3Parse::createVariable(CRELINE(), *$1, NULL); } ; sigAttrListE: /*empty*/ {} @@ -604,7 +654,7 @@ defpList: defpOne { $$ = $1; } | defpList ',' defpOne { $$ = $1->addNext($3); } ; -defpOne: yID '.' yID '=' expr { $$ = new AstDefParam($4,*$1,*$3,$5); } +defpOne: yaID '.' yaID '=' expr { $$ = new AstDefParam($4,*$1,*$3,$5); } ; // Instances @@ -616,7 +666,7 @@ instnameList: instname { $$ = $1; } | instnameList ',' instname { $$ = $1->addNext($3); } ; -instname: yID funcRange '(' cellpinList ')' { $$ = new AstCell($3,*$1,V3Parse::s_instModule,$4,V3Parse::s_instParamp,$2); $$->pinStar(V3Parse::s_pinStar); } +instname: yaID funcRange '(' cellpinList ')' { $$ = new AstCell($3,*$1,V3Parse::s_instModule,$4,V3Parse::s_instParamp,$2); $$->pinStar(V3Parse::s_pinStar); } ; cellpinList: {V3Parse::s_pinNum=1; V3Parse::s_pinStar=false; } cellpinlist2 { $$ = $2; } @@ -628,9 +678,9 @@ cellpinlist2: cellpinitemE { $$ = $1; } cellpinitemE: /* empty */ { $$ = NULL; V3Parse::s_pinNum++; } | '.' '*' { $$ = NULL; if (V3Parse::s_pinStar) $1->v3error("Duplicate .* in a cell"); V3Parse::s_pinStar=true; } - | '.' yID { $$ = new AstPin($1,V3Parse::s_pinNum++,*$2,new AstVarRef($1,*$2,false)); $$->svImplicit(true);} - | '.' yID '(' ')' { $$ = NULL; V3Parse::s_pinNum++; } - | '.' yID '(' expr ')' { $$ = new AstPin($1,V3Parse::s_pinNum++,*$2,$4); } + | '.' yaID { $$ = new AstPin($1,V3Parse::s_pinNum++,*$2,new AstVarRef($1,*$2,false)); $$->svImplicit(true);} + | '.' yaID '(' ')' { $$ = NULL; V3Parse::s_pinNum++; } + | '.' yaID '(' expr ')' { $$ = new AstPin($1,V3Parse::s_pinNum++,*$2,$4); } | expr { $$ = new AstPin(CRELINE(),V3Parse::s_pinNum++,"",$1); } ; @@ -656,14 +706,14 @@ senitemEdge: yPOSEDGE varRefDotBit { $$ = new AstSenItem($1,AstEdgeType::POSED ; stmtBlock: stmt { $$ = $1; } - | yBBEGIN stmtList yBEND { $$ = $2; } - | yBBEGIN yBEND { $$ = NULL; } - | beginNamed stmtList yBEND { $$ = $1; $1->addStmtp($2); } - | beginNamed yBEND { $$ = $1; } + | yBEGIN stmtList yEND { $$ = $2; } + | yBEGIN yEND { $$ = NULL; } + | beginNamed stmtList yEND { $$ = $1; $1->addStmtp($2); } + | beginNamed yEND { $$ = $1; } ; -beginNamed: yBBEGIN ':' yID varDeclList { $$ = new AstBegin($2,*$3,$4); } - | yBBEGIN ':' yID { $$ = new AstBegin($2,*$3,NULL); } +beginNamed: yBEGIN ':' yaID varDeclList { $$ = new AstBegin($2,*$3,$4); } + | yBEGIN ':' yaID { $$ = new AstBegin($2,*$3,NULL); } ; stmtList: stmtBlock { $$ = $1; } @@ -672,13 +722,13 @@ stmtList: stmtBlock { $$ = $1; } stmt: ';' { $$ = NULL; } | labeledStmt { $$ = $1; } - | yID ':' labeledStmt { $$ = new AstBegin($2, *$1, $3); } /*S05 block creation rule*/ + | yaID ':' labeledStmt { $$ = new AstBegin($2, *$1, $3); } /*S05 block creation rule*/ - | varRefDotBit yLTE delayE expr ';' { $$ = new AstAssignDly($2,$1,$4); } + | varRefDotBit yP_LTE delayE expr ';' { $$ = new AstAssignDly($2,$1,$4); } | varRefDotBit '=' delayE expr ';' { $$ = new AstAssign($2,$1,$4); } | varRefDotBit '=' yD_FOPEN '(' expr ',' expr ')' ';' { $$ = new AstFOpen($3,$1,$5,$7); } | yASSIGN varRefDotBit '=' delayE expr ';' { $$ = new AstAssign($1,$2,$5); } - | '{' concIdList '}' yLTE delayE expr ';' { $$ = new AstAssignDly($4,$2,$6); } + | '{' concIdList '}' yP_LTE delayE expr ';' { $$ = new AstAssignDly($4,$2,$6); } | '{' concIdList '}' '=' delayE expr ';' { $$ = new AstAssign($4,$2,$6); } | yD_C '(' cStrList ')' ';' { $$ = (v3Global.opt.ignc() ? NULL : new AstUCStmt($1,$3)); } | yD_FCLOSE '(' varRefDotBit ')' ';' { $$ = new AstFClose($1, $3); } @@ -689,19 +739,19 @@ stmt: ';' { $$ = NULL; } | taskRef ';' { $$ = $1; } | yD_DISPLAY ';' { $$ = new AstDisplay($1,AstDisplayType::DISPLAY,"", NULL,NULL); } - | yD_DISPLAY '(' ySTRING commaEListE ')' ';' { $$ = new AstDisplay($1,AstDisplayType::DISPLAY,*$3,NULL,$4); } - | yD_WRITE '(' ySTRING commaEListE ')' ';' { $$ = new AstDisplay($1,AstDisplayType::WRITE, *$3,NULL,$4); } - | yD_FDISPLAY '(' varRefDotBit ',' ySTRING commaEListE ')' ';' { $$ = new AstDisplay($1,AstDisplayType::DISPLAY,*$5,$3,$6); } - | yD_FWRITE '(' varRefDotBit ',' ySTRING commaEListE ')' ';' { $$ = new AstDisplay($1,AstDisplayType::WRITE, *$5,$3,$6); } + | yD_DISPLAY '(' yaSTRING commaEListE ')' ';' { $$ = new AstDisplay($1,AstDisplayType::DISPLAY,*$3,NULL,$4); } + | yD_WRITE '(' yaSTRING commaEListE ')' ';' { $$ = new AstDisplay($1,AstDisplayType::WRITE, *$3,NULL,$4); } + | yD_FDISPLAY '(' varRefDotBit ',' yaSTRING commaEListE ')' ';' { $$ = new AstDisplay($1,AstDisplayType::DISPLAY,*$5,$3,$6); } + | yD_FWRITE '(' varRefDotBit ',' yaSTRING commaEListE ')' ';' { $$ = new AstDisplay($1,AstDisplayType::WRITE, *$5,$3,$6); } | yD_INFO ';' { $$ = new AstDisplay($1,AstDisplayType::INFO, "", NULL,NULL); } - | yD_INFO '(' ySTRING commaEListE ')' ';' { $$ = new AstDisplay($1,AstDisplayType::INFO, *$3,NULL,$4); } + | yD_INFO '(' yaSTRING commaEListE ')' ';' { $$ = new AstDisplay($1,AstDisplayType::INFO, *$3,NULL,$4); } | yD_WARNING ';' { $$ = new AstDisplay($1,AstDisplayType::WARNING,"", NULL,NULL); } - | yD_WARNING '(' ySTRING commaEListE ')' ';' { $$ = new AstDisplay($1,AstDisplayType::WARNING,*$3,NULL,$4); } + | yD_WARNING '(' yaSTRING commaEListE ')' ';' { $$ = new AstDisplay($1,AstDisplayType::WARNING,*$3,NULL,$4); } | yD_ERROR ';' { $$ = V3Parse::createDisplayError($1); } - | yD_ERROR '(' ySTRING commaEListE ')' ';' { $$ = new AstDisplay($1,AstDisplayType::ERROR, *$3,NULL,$4); $$->addNext(new AstStop($1)); } + | yD_ERROR '(' yaSTRING commaEListE ')' ';' { $$ = new AstDisplay($1,AstDisplayType::ERROR, *$3,NULL,$4); $$->addNext(new AstStop($1)); } | yD_FATAL ';' { $$ = new AstDisplay($1,AstDisplayType::FATAL, "", NULL,NULL); $$->addNext(new AstStop($1)); } | yD_FATAL '(' expr ')' ';' { $$ = new AstDisplay($1,AstDisplayType::FATAL, "", NULL,NULL); $$->addNext(new AstStop($1)); } - | yD_FATAL '(' expr ',' ySTRING commaEListE ')' ';' { $$ = new AstDisplay($1,AstDisplayType::FATAL, *$5,NULL,$6); $$->addNext(new AstStop($1)); } + | yD_FATAL '(' expr ',' yaSTRING commaEListE ')' ';' { $$ = new AstDisplay($1,AstDisplayType::FATAL, *$5,NULL,$6); $$->addNext(new AstStop($1)); } | yD_READMEMB '(' expr ',' varRefMem ')' ';' { $$ = new AstReadMem($1,false,$3,$5,NULL,NULL); } | yD_READMEMB '(' expr ',' varRefMem ',' expr ')' ';' { $$ = new AstReadMem($1,false,$3,$5,$7,NULL); } @@ -716,7 +766,7 @@ labeledStmt: assertStmt { $$ = $1; } ; stateCaseForIf: caseStmt caseAttrE caseList yENDCASE { $$ = $1; $1->addItemsp($3); } - | yIF expr stmtBlock %prec yLOWER_THAN_ELSE { $$ = new AstIf($1,$2,$3,NULL); } + | yIF expr stmtBlock %prec prLOWER_THAN_ELSE { $$ = new AstIf($1,$2,$3,NULL); } | yIF expr stmtBlock yELSE stmtBlock { $$ = new AstIf($1,$2,$3,$5); } | yFOR '(' varRefBase '=' expr ';' expr ';' varRefBase '=' expr ')' stmtBlock { $$ = new AstFor($1, new AstAssign($4,$3,$5) @@ -726,7 +776,7 @@ stateCaseForIf: caseStmt caseAttrE caseList yENDCASE { $$ = $1; $1->addItemsp($3 | yDO stmtBlock yWHILE '(' expr ')' { $$ = $2->cloneTree(true); $$->addNext(new AstWhile($1,$5,$2));} ; -assertStmt: yASSERT '(' expr ')' stmtBlock %prec yLOWER_THAN_ELSE { $$ = new AstVAssert($1,$3,$5, V3Parse::createDisplayError($1)); } +assertStmt: yASSERT '(' expr ')' stmtBlock %prec prLOWER_THAN_ELSE { $$ = new AstVAssert($1,$3,$5, V3Parse::createDisplayError($1)); } | yASSERT '(' expr ')' yELSE stmtBlock { $$ = new AstVAssert($1,$3,NULL,$6); } | yASSERT '(' expr ')' stmtBlock yELSE stmtBlock { $$ = new AstVAssert($1,$3,$5,$7); } ; @@ -753,14 +803,14 @@ casecondList: expr { $$ = $1; } | casecondList ',' expr { $$ = $1;$1->addNext($3); } ; -taskDecl: yTASK yID ';' stmtBlock yENDTASK { $$ = new AstTask ($1,*$2,$4);} - | yTASK yID ';' funcVarList stmtBlock yENDTASK { $$ = new AstTask ($1,*$2,$4); $4->addNextNull($5); } +taskDecl: yTASK yaID ';' stmtBlock yENDTASK { $$ = new AstTask ($1,*$2,$4);} + | yTASK yaID ';' funcVarList stmtBlock yENDTASK { $$ = new AstTask ($1,*$2,$4); $4->addNextNull($5); } ; -funcDecl: yFUNCTION funcRange yID ';' funcBody yENDFUNCTION { $$ = new AstFunc ($1,*$3,$5,$2); } - | yFUNCTION ySIGNED funcRange yID ';' funcBody yENDFUNCTION { $$ = new AstFunc ($1,*$4,$6,$3); $$->isSigned(true); } - | yFUNCTION funcRange yID yVL_ISOLATE_ASSIGNMENTS ';' funcBody yENDFUNCTION { $$ = new AstFunc ($1,*$3,$6,$2); $$->attrIsolateAssign(true);} - | yFUNCTION ySIGNED funcRange yID yVL_ISOLATE_ASSIGNMENTS ';' funcBody yENDFUNCTION { $$ = new AstFunc ($1,*$4,$7,$3); $$->attrIsolateAssign(true); $$->isSigned(true); } +funcDecl: yFUNCTION funcRange yaID ';' funcBody yENDFUNCTION { $$ = new AstFunc ($1,*$3,$5,$2); } + | yFUNCTION ySIGNED funcRange yaID ';' funcBody yENDFUNCTION { $$ = new AstFunc ($1,*$4,$6,$3); $$->isSigned(true); } + | yFUNCTION funcRange yaID yVL_ISOLATE_ASSIGNMENTS ';' funcBody yENDFUNCTION { $$ = new AstFunc ($1,*$3,$6,$2); $$->attrIsolateAssign(true);} + | yFUNCTION ySIGNED funcRange yaID yVL_ISOLATE_ASSIGNMENTS ';' funcBody yENDFUNCTION { $$ = new AstFunc ($1,*$4,$7,$3); $$->attrIsolateAssign(true); $$->isSigned(true); } ; funcBody: funcVarList stmtBlock { $$ = $1;$1->addNextNull($2); } @@ -783,44 +833,44 @@ funcVar: ioDecl { $$ = $1; } constExpr: expr { $$ = $1; } ; -exprNoStr: expr yOROR expr { $$ = new AstLogOr ($2,$1,$3); } - | expr yANDAND expr { $$ = new AstLogAnd ($2,$1,$3); } +exprNoStr: expr yP_OROR expr { $$ = new AstLogOr ($2,$1,$3); } + | expr yP_ANDAND expr { $$ = new AstLogAnd ($2,$1,$3); } | expr '&' expr { $$ = new AstAnd ($2,$1,$3); } | expr '|' expr { $$ = new AstOr ($2,$1,$3); } - | expr yOP_NAND expr { $$ = new AstNot($2,new AstAnd ($2,$1,$3)); } - | expr yOP_NOR expr { $$ = new AstNot($2,new AstOr ($2,$1,$3)); } + | expr yP_NAND expr { $$ = new AstNot($2,new AstAnd ($2,$1,$3)); } + | expr yP_NOR expr { $$ = new AstNot($2,new AstOr ($2,$1,$3)); } | expr '^' expr { $$ = new AstXor ($2,$1,$3); } - | expr yOP_XNOR expr { $$ = new AstXnor ($2,$1,$3); } - | expr yEQUAL expr { $$ = new AstEq ($2,$1,$3); } - | expr yNOTEQUAL expr { $$ = new AstNeq ($2,$1,$3); } - | expr yCASEEQUAL expr { $$ = new AstEqCase ($2,$1,$3); } - | expr yCASENOTEQUAL expr { $$ = new AstNeqCase ($2,$1,$3); } + | expr yP_XNOR expr { $$ = new AstXnor ($2,$1,$3); } + | expr yP_EQUAL expr { $$ = new AstEq ($2,$1,$3); } + | expr yP_NOTEQUAL expr { $$ = new AstNeq ($2,$1,$3); } + | expr yP_CASEEQUAL expr { $$ = new AstEqCase ($2,$1,$3); } + | expr yP_CASENOTEQUAL expr { $$ = new AstNeqCase ($2,$1,$3); } | expr '>' expr { $$ = new AstGt ($2,$1,$3); } | expr '<' expr { $$ = new AstLt ($2,$1,$3); } - | expr yGTE expr { $$ = new AstGte ($2,$1,$3); } - | expr yLTE expr { $$ = new AstLte ($2,$1,$3); } - | expr ySLEFT expr { $$ = new AstShiftL ($2,$1,$3); } - | expr ySRIGHT expr { $$ = new AstShiftR ($2,$1,$3); } - | expr ySSRIGHT expr { $$ = new AstShiftRS ($2,$1,$3); } + | expr yP_GTE expr { $$ = new AstGte ($2,$1,$3); } + | expr yP_LTE expr { $$ = new AstLte ($2,$1,$3); } + | expr yP_SLEFT expr { $$ = new AstShiftL ($2,$1,$3); } + | expr yP_SRIGHT expr { $$ = new AstShiftR ($2,$1,$3); } + | expr yP_SSRIGHT expr { $$ = new AstShiftRS ($2,$1,$3); } | expr '+' expr { $$ = new AstAdd ($2,$1,$3); } | expr '-' expr { $$ = new AstSub ($2,$1,$3); } | expr '*' expr { $$ = new AstMul ($2,$1,$3); } | expr '/' expr { $$ = new AstDiv ($2,$1,$3); } | expr '%' expr { $$ = new AstModDiv ($2,$1,$3); } - | expr yPOW expr { $$ = new AstPow ($2,$1,$3); } - | expr yOP_LOGIF expr { $$ = new AstLogIf ($2,$1,$3); } - | expr yOP_LOGIFF expr { $$ = new AstLogIff ($2,$1,$3); } + | expr yP_POW expr { $$ = new AstPow ($2,$1,$3); } + | expr yP_LOGIF expr { $$ = new AstLogIf ($2,$1,$3); } + | expr yP_LOGIFF expr { $$ = new AstLogIff ($2,$1,$3); } - | '-' expr %prec yUNARYARITH { $$ = new AstUnaryMin ($1,$2); } - | '+' expr %prec yUNARYARITH { $$ = $2; } - | '&' expr %prec yREDUCTION { $$ = new AstRedAnd ($1,$2); } - | '|' expr %prec yREDUCTION { $$ = new AstRedOr ($1,$2); } - | '^' expr %prec yREDUCTION { $$ = new AstRedXor ($1,$2); } - | yOP_XNOR expr %prec yREDUCTION { $$ = new AstRedXnor ($1,$2); } - | yOP_NAND expr %prec yREDUCTION { $$ = new AstNot($1,new AstRedAnd($1,$2)); } - | yOP_NOR expr %prec yREDUCTION { $$ = new AstNot($1,new AstRedOr ($1,$2)); } - | '!' expr %prec yNEGATION { $$ = new AstLogNot ($1,$2); } - | '~' expr %prec yNEGATION { $$ = new AstNot ($1,$2); } + | '-' expr %prec prUNARYARITH { $$ = new AstUnaryMin ($1,$2); } + | '+' expr %prec prUNARYARITH { $$ = $2; } + | '&' expr %prec prREDUCTION { $$ = new AstRedAnd ($1,$2); } + | '|' expr %prec prREDUCTION { $$ = new AstRedOr ($1,$2); } + | '^' expr %prec prREDUCTION { $$ = new AstRedXor ($1,$2); } + | yP_XNOR expr %prec prREDUCTION { $$ = new AstRedXnor ($1,$2); } + | yP_NAND expr %prec prREDUCTION { $$ = new AstNot($1,new AstRedAnd($1,$2)); } + | yP_NOR expr %prec prREDUCTION { $$ = new AstNot($1,new AstRedOr ($1,$2)); } + | '!' expr %prec prNEGATION { $$ = new AstLogNot ($1,$2); } + | '~' expr %prec prNEGATION { $$ = new AstNot ($1,$2); } | expr '?' expr ':' expr { $$ = new AstCond($2,$1,$3,$5); } | '(' expr ')' { $$ = $2; } @@ -840,7 +890,7 @@ exprNoStr: expr yOROR expr { $$ = new AstLogOr ($2,$1,$3); } | funcRef { $$ = $1; } - | yINTNUM { $$ = new AstConst(CRELINE(),*$1); } + | yaINTNUM { $$ = new AstConst(CRELINE(),*$1); } | varRefDotBit { $$ = $1; } ; @@ -877,7 +927,6 @@ commaEListE: /* empty */ { $$ = NULL; } | ',' eList { $$ = $2; } ; - // Gate declarations gateDecl: yBUF gateBufList ';' { $$ = $2; } | yNOT gateNotList ';' { $$ = $2; } @@ -915,7 +964,7 @@ gateXnorList: gateXnor { $$ = $1; } ; gateIdE: /*empty*/ {} - | yID {} + | yaID {} ; gateBuf: gateIdE '(' varRefDotBit ',' expr ')' { $$ = new AstAssignW ($2,$3,$5); $$->allowImplicit(true); } @@ -952,13 +1001,12 @@ specifyJunkList: specifyJunk /* ignored */ ; specifyJunk: dterm {} /* ignored */ - | ySTRING {} | ';' {} | '!' {} | '&' {} | '(' {} | ')' {} - | '*' {} | '/' {} | '%' {} | yPOW {} + | '*' {} | '/' {} | '%' {} | yP_POW {} | '+' {} | '-' {} | ',' {} | ':' {} @@ -971,32 +1019,27 @@ specifyJunk: dterm {} /* ignored */ | '[' {} | ']' {} | '|' {} | '~' {} - | yANDAND {} | yGTE {} | yLTE {} - | yEQUAL {} | yNOTEQUAL {} - | yIF {} - | yNEGATION {} - | yNEGEDGE {} - | yOP_XNOR {} | yOP_NOR {} | yOP_NAND {} - | yOROR {} - | yPOSEDGE {} - | yREDUCTION {} - | ySLEFT {} | ySRIGHT {} | ySSRIGHT {} - | yPLUSCOLON {} | yMINUSCOLON {} - | yUNARYARITH {} - | yTIMINGSPEC {} - | yOP_LOGIF {} - | yOP_LOGIFF {} - | yBRA_STAR {} - | yBRA_STAR_KET {} - | yBRA_PLUS_KET {} - | yBRA_MINUS_GT {} - | yBRA_MINUS_GT_KET {} - | yBRA_EQ {} + | yIF {} + | yNEGEDGE {} + | yPOSEDGE {} + + | yaSTRING {} + | yaTIMINGSPEC {} + + | yP_ANDAND {} | yP_GTE {} | yP_LTE {} + | yP_EQUAL {} | yP_NOTEQUAL {} + | yP_XNOR {} | yP_NOR {} | yP_NAND {} + | yP_OROR {} + | yP_SLEFT {} | yP_SRIGHT {} | yP_SSRIGHT {} + | yP_PLUSCOLON {} | yP_MINUSCOLON {} + + | yP_LOGIF {} + | yP_LOGIFF {} | yPSL_BRA {} | yPSL_KET {} - | yOR_MINUS_GT {} - | yOR_EQ_GT {} + | yP_OR_MINUS_GT {} + | yP_OR_EQ_GT {} ; //************************************************ @@ -1005,11 +1048,11 @@ specifyJunk: dterm {} /* ignored */ // Single component of dotted path, maybe [#]. // Due to lookahead constraints, we can't know if [:] or [+:] are valid (last dotted part), // we'll assume so and cleanup later. -idArrayed: yID { $$ = new AstText(CRELINE(),*$1); } +idArrayed: yaID { $$ = new AstText(CRELINE(),*$1); } | idArrayed '[' expr ']' { $$ = new AstSelBit($2,$1,$3); } // Or AstArraySel, don't know yet. | idArrayed '[' constExpr ':' constExpr ']' { $$ = new AstSelExtract($2,$1,$3,$5); } - | idArrayed '[' expr yPLUSCOLON constExpr ']' { $$ = new AstSelPlus($2,$1,$3,$5); } - | idArrayed '[' expr yMINUSCOLON constExpr ']' { $$ = new AstSelMinus($2,$1,$3,$5); } + | idArrayed '[' expr yP_PLUSCOLON constExpr ']' { $$ = new AstSelPlus($2,$1,$3,$5); } + | idArrayed '[' expr yP_MINUSCOLON constExpr ']' { $$ = new AstSelMinus($2,$1,$3,$5); } ; idDotted: idArrayed { $$ = $1; } @@ -1017,7 +1060,7 @@ idDotted: idArrayed { $$ = $1; } ; // VarRef without any dots or vectorizaion -varRefBase: yID { $$ = new AstVarRef(CRELINE(),*$1,false);} +varRefBase: yaID { $$ = new AstVarRef(CRELINE(),*$1,false);} ; // VarRef to a Memory @@ -1035,10 +1078,10 @@ taskRef: idDotted { $$ = new AstTaskRef(CRELINE(),new AstParseRef($1->fileli funcRef: idDotted '(' eList ')' { $$ = new AstFuncRef($2,new AstParseRef($1->fileline(), AstParseRefExp::FUNC, $1), $3); } ; -strAsInt: ySTRING { $$ = new AstConst(CRELINE(),V3Number(V3Number::VerilogString(),CRELINE(),V3Parse::deQuote(CRELINE(),*$1)));} +strAsInt: yaSTRING { $$ = new AstConst(CRELINE(),V3Number(V3Number::VerilogString(),CRELINE(),V3Parse::deQuote(CRELINE(),*$1)));} ; -strAsText: ySTRING { $$ = V3Parse::createTextQuoted(CRELINE(),*$1);} +strAsText: yaSTRING { $$ = V3Parse::createTextQuoted(CRELINE(),*$1);} ; concIdList: varRefDotBit { $$ = $1; } @@ -1052,15 +1095,15 @@ pslStmt: yPSL pslDir stateExitPsl { $$ = $2; } | yPSL pslDecl stateExitPsl { $$ = $2; } ; -pslDir: yID ':' pslDirOne { $$ = $3; } // ADD: Create label on $1 +pslDir: yaID ':' pslDirOne { $$ = $3; } // ADD: Create label on $1 | pslDirOne { $$ = $1; } ; //ADD: | yRESTRICT pslSequence ';' { $$ = PSLUNSUP(new AstPslRestrict($1,$2)); } pslDirOne: yPSL_ASSERT pslProp ';' { $$ = new AstPslAssert($1,$2); } - | yPSL_ASSERT pslProp yREPORT ySTRING ';' { $$ = new AstPslAssert($1,$2,*$4); } + | yPSL_ASSERT pslProp yREPORT yaSTRING ';' { $$ = new AstPslAssert($1,$2,*$4); } | yCOVER pslProp ';' { $$ = new AstPslCover($1,$2); } - | yCOVER pslProp yREPORT ySTRING ';' { $$ = new AstPslCover($1,$2,*$4); } + | yCOVER pslProp yREPORT yaSTRING ';' { $$ = new AstPslCover($1,$2,*$4); } ; pslDecl: yDEFAULT yCLOCK '=' senitemEdge ';' { $$ = new AstPslDefClock($3, $4); } @@ -1095,8 +1138,6 @@ pslExpr: exprPsl { $$ = new AstPslBool($1->fileline(), $1); } | yTRUE { $$ = new AstPslBool($1, new AstConst($1, V3Number($1,1,1))); } ; -//********************************************************************** -//********************************************************************** //********************************************************************** %%