diff --git a/src/verilog.l b/src/verilog.l index 01d2537a5..9bee9d968 100644 --- a/src/verilog.l +++ b/src/verilog.l @@ -458,6 +458,7 @@ vnum {vnum1}|{vnum2}|{vnum3}|{vnum4}|{vnum5} "$unpacked_dimensions" { FL; return yD_UNPACKED_DIMENSIONS; } "$warning" { FL; return yD_WARNING; } /* SV2005 Keywords */ + /* Note assert_strobe was in SystemVerilog 3.1, but removed for SystemVerilog 2005 */ "$unit" { FL; return yD_UNIT; } /* Yes, a keyword, not task */ "alias" { FL; return yALIAS; } "always_comb" { FL; return yALWAYS_COMB; } @@ -465,7 +466,10 @@ vnum {vnum1}|{vnum2}|{vnum3}|{vnum4}|{vnum5} "always_latch" { FL; return yALWAYS_LATCH; } "assert" { FL; return yASSERT; } "assume" { FL; return yASSUME; } + "before" { ERROR_RSVD_WORD("SystemVerilog 2005"); } "bind" { FL; return yBIND; } + "bins" { ERROR_RSVD_WORD("SystemVerilog 2005"); } + "binsof" { ERROR_RSVD_WORD("SystemVerilog 2005"); } "bit" { FL; return yBIT; } "break" { FL; return yBREAK; } "byte" { FL; return yBYTE; } @@ -473,32 +477,45 @@ vnum {vnum1}|{vnum2}|{vnum3}|{vnum4}|{vnum5} "class" { FL; return yCLASS; } "clocking" { FL; return yCLOCKING; } "const" { FL; return yCONST__LEX; } + "constraint" { ERROR_RSVD_WORD("SystemVerilog 2005"); } "context" { FL; return yCONTEXT; } "continue" { FL; return yCONTINUE; } "cover" { FL; return yCOVER; } + "covergroup" { ERROR_RSVD_WORD("SystemVerilog 2005"); } + "coverpoint" { ERROR_RSVD_WORD("SystemVerilog 2005"); } + "cross" { ERROR_RSVD_WORD("SystemVerilog 2005"); } + "dist" { ERROR_RSVD_WORD("SystemVerilog 2005"); } "do" { FL; return yDO; } "endclass" { FL; return yENDCLASS; } "endclocking" { FL; return yENDCLOCKING; } + "endgroup" { ERROR_RSVD_WORD("SystemVerilog 2005"); } "endinterface" { FL; return yENDINTERFACE; } "endpackage" { FL; return yENDPACKAGE; } "endprogram" { FL; return yENDPROGRAM; } "endproperty" { FL; return yENDPROPERTY; } + "endsequence" { ERROR_RSVD_WORD("SystemVerilog 2005"); } "enum" { FL; return yENUM; } + "expect" { ERROR_RSVD_WORD("SystemVerilog 2005"); } "export" { FL; return yEXPORT; } "extends" { FL; return yEXTENDS; } "extern" { FL; return yEXTERN; } "final" { FL; return yFINAL; } + "first_match" { ERROR_RSVD_WORD("SystemVerilog 2005"); } "forkjoin" { FL; return yFORKJOIN; } "iff" { FL; return yIFF; } + "ignore_bins" { ERROR_RSVD_WORD("SystemVerilog 2005"); } + "illegal_bins" { ERROR_RSVD_WORD("SystemVerilog 2005"); } "import" { FL; return yIMPORT; } "inside" { FL; return yINSIDE; } "int" { FL; return yINT; } "interface" { FL; return yINTERFACE; } + "intersect" { ERROR_RSVD_WORD("SystemVerilog 2005"); } "join_any" { FL; return yJOIN_ANY; } "join_none" { FL; return yJOIN_NONE; } "local" { FL; return yLOCAL__LEX; } "logic" { FL; return yLOGIC; } "longint" { FL; return yLONGINT; } + "matches" { ERROR_RSVD_WORD("SystemVerilog 2005"); } "modport" { FL; return yMODPORT; } "new" { FL; return yNEW__LEX; } "null" { FL; return yNULL; } @@ -512,16 +529,22 @@ vnum {vnum1}|{vnum2}|{vnum3}|{vnum4}|{vnum5} "rand" { FL; return yRAND; } "randc" { FL; return yRANDC; } "randcase" { FL; return yRANDCASE; } + "randomize" { ERROR_RSVD_WORD("SystemVerilog 2005"); } + "randsequence" { ERROR_RSVD_WORD("SystemVerilog 2005"); } "ref" { FL; return yREF; } "restrict" { FL; return yRESTRICT; } "return" { FL; return yRETURN; } + "sequence" { ERROR_RSVD_WORD("SystemVerilog 2005"); } "shortint" { FL; return ySHORTINT; } "shortreal" { FL; return ySHORTREAL; } + "solve" { ERROR_RSVD_WORD("SystemVerilog 2005"); } "static" { FL; return ySTATIC__ETC; } "string" { FL; return ySTRING; } "struct" { FL; return ySTRUCT; } "super" { FL; return ySUPER; } + "tagged" { ERROR_RSVD_WORD("SystemVerilog 2005"); } "this" { FL; return yTHIS; } + "throughout" { ERROR_RSVD_WORD("SystemVerilog 2005"); } "timeprecision" { FL; return yTIMEPRECISION; } "timeunit" { FL; return yTIMEUNIT; } "type" { FL; return yTYPE; } @@ -531,30 +554,6 @@ vnum {vnum1}|{vnum2}|{vnum3}|{vnum4}|{vnum5} "var" { FL; return yVAR; } "virtual" { FL; return yVIRTUAL__LEX; } "void" { FL; return yVOID; } - /* Generic unsupported warnings */ - /* Note assert_strobe was in SystemVerilog 3.1, but removed for SystemVerilog 2005 */ - "before" { ERROR_RSVD_WORD("SystemVerilog 2005"); } - "bins" { ERROR_RSVD_WORD("SystemVerilog 2005"); } - "binsof" { ERROR_RSVD_WORD("SystemVerilog 2005"); } - "constraint" { ERROR_RSVD_WORD("SystemVerilog 2005"); } - "covergroup" { ERROR_RSVD_WORD("SystemVerilog 2005"); } - "coverpoint" { ERROR_RSVD_WORD("SystemVerilog 2005"); } - "cross" { ERROR_RSVD_WORD("SystemVerilog 2005"); } - "dist" { ERROR_RSVD_WORD("SystemVerilog 2005"); } - "endgroup" { ERROR_RSVD_WORD("SystemVerilog 2005"); } - "endsequence" { ERROR_RSVD_WORD("SystemVerilog 2005"); } - "expect" { ERROR_RSVD_WORD("SystemVerilog 2005"); } - "first_match" { ERROR_RSVD_WORD("SystemVerilog 2005"); } - "ignore_bins" { ERROR_RSVD_WORD("SystemVerilog 2005"); } - "illegal_bins" { ERROR_RSVD_WORD("SystemVerilog 2005"); } - "intersect" { ERROR_RSVD_WORD("SystemVerilog 2005"); } - "matches" { ERROR_RSVD_WORD("SystemVerilog 2005"); } - "randomize" { ERROR_RSVD_WORD("SystemVerilog 2005"); } - "randsequence" { ERROR_RSVD_WORD("SystemVerilog 2005"); } - "sequence" { ERROR_RSVD_WORD("SystemVerilog 2005"); } - "solve" { ERROR_RSVD_WORD("SystemVerilog 2005"); } - "tagged" { ERROR_RSVD_WORD("SystemVerilog 2005"); } - "throughout" { ERROR_RSVD_WORD("SystemVerilog 2005"); } "wait_order" { ERROR_RSVD_WORD("SystemVerilog 2005"); } "wildcard" { ERROR_RSVD_WORD("SystemVerilog 2005"); } "with" { ERROR_RSVD_WORD("SystemVerilog 2005"); } @@ -564,13 +563,11 @@ vnum {vnum1}|{vnum2}|{vnum3}|{vnum4}|{vnum5} /* SystemVerilog 2009 */ { /* Keywords */ - "global" { FL; return yGLOBAL__LEX; } - "unique0" { FL; return yUNIQUE0; } - /* Generic unsupported warnings */ "accept_on" { ERROR_RSVD_WORD("SystemVerilog 2009"); } "checker" { ERROR_RSVD_WORD("SystemVerilog 2009"); } "endchecker" { ERROR_RSVD_WORD("SystemVerilog 2009"); } "eventually" { ERROR_RSVD_WORD("SystemVerilog 2009"); } + "global" { FL; return yGLOBAL__LEX; } "implies" { ERROR_RSVD_WORD("SystemVerilog 2009"); } "let" { ERROR_RSVD_WORD("SystemVerilog 2009"); } "nexttime" { ERROR_RSVD_WORD("SystemVerilog 2009"); } @@ -583,6 +580,7 @@ vnum {vnum1}|{vnum2}|{vnum3}|{vnum4}|{vnum5} "strong" { ERROR_RSVD_WORD("SystemVerilog 2009"); } "sync_accept_on" { ERROR_RSVD_WORD("SystemVerilog 2009"); } "sync_reject_on" { ERROR_RSVD_WORD("SystemVerilog 2009"); } + "unique0" { FL; return yUNIQUE0; } "until" { ERROR_RSVD_WORD("SystemVerilog 2009"); } "until_with" { ERROR_RSVD_WORD("SystemVerilog 2009"); } "untyped" { ERROR_RSVD_WORD("SystemVerilog 2009"); } @@ -709,10 +707,18 @@ vnum {vnum1}|{vnum2}|{vnum3}|{vnum4}|{vnum5} { "/*verilator"{ws}*"*/" { FL_FWD; FL_BRK; } /* Ignore empty comments, may be `endif // verilator */ "/*verilator clock_enable*/" { FL; return yVL_CLOCK_ENABLE; } + "/*verilator clocker*/" { FL; return yVL_CLOCKER; } "/*verilator coverage_block_off*/" { FL; return yVL_COVERAGE_BLOCK_OFF; } + "/*verilator coverage_off*/" { FL_FWD; PARSEP->fileline()->coverageOn(false); FL_BRK; } + "/*verilator coverage_on*/" { FL_FWD; PARSEP->fileline()->coverageOn(true); FL_BRK; } "/*verilator full_case*/" { FL; return yVL_FULL_CASE; } "/*verilator inline_module*/" { FL; return yVL_INLINE_MODULE; } "/*verilator isolate_assignments*/" { FL; return yVL_ISOLATE_ASSIGNMENTS; } + "/*verilator lint_off"[^*]*"*/" { FL_FWD; PARSEP->verilatorCmtLint(yytext, true); FL_BRK; } + "/*verilator lint_on"[^*]*"*/" { FL_FWD; PARSEP->verilatorCmtLint(yytext, false); FL_BRK; } + "/*verilator lint_restore*/" { FL_FWD; PARSEP->verilatorCmtLintRestore(); FL_BRK; } + "/*verilator lint_save*/" { FL_FWD; PARSEP->verilatorCmtLintSave(); FL_BRK; } + "/*verilator no_clocker*/" { FL; return yVL_NO_CLOCKER; } "/*verilator no_inline_module*/" { FL; return yVL_NO_INLINE_MODULE; } "/*verilator no_inline_task*/" { FL; return yVL_NO_INLINE_TASK; } "/*verilator parallel_case*/" { FL; return yVL_PARALLEL_CASE; } @@ -721,22 +727,14 @@ vnum {vnum1}|{vnum2}|{vnum3}|{vnum4}|{vnum5} "/*verilator public_flat_rd*/" { FL; return yVL_PUBLIC_FLAT_RD; } "/*verilator public_flat_rw*/" { FL; return yVL_PUBLIC_FLAT_RW; } // The @(edge) is converted by the preproc "/*verilator public_module*/" { FL; return yVL_PUBLIC_MODULE; } - "/*verilator split_var*/" { FL; return yVL_SPLIT_VAR; } - "/*verilator sc_clock*/" { FL; return yVL_CLOCK; } - "/*verilator clocker*/" { FL; return yVL_CLOCKER; } - "/*verilator no_clocker*/" { FL; return yVL_NO_CLOCKER; } "/*verilator sc_bv*/" { FL; return yVL_SC_BV; } + "/*verilator sc_clock*/" { FL; return yVL_CLOCK; } "/*verilator sformat*/" { FL; return yVL_SFORMAT; } + "/*verilator split_var*/" { FL; return yVL_SPLIT_VAR; } "/*verilator systemc_clock*/" { FL; return yVL_CLOCK; } + "/*verilator tag"[^*]*"*/" { FL_FWD; PARSEP->tag(yytext); FL_BRK; } "/*verilator tracing_off*/" { FL_FWD; PARSEP->fileline()->tracingOn(false); FL_BRK; } "/*verilator tracing_on*/" { FL_FWD; PARSEP->fileline()->tracingOn(true); FL_BRK; } - "/*verilator coverage_off*/" { FL_FWD; PARSEP->fileline()->coverageOn(false); FL_BRK; } - "/*verilator coverage_on*/" { FL_FWD; PARSEP->fileline()->coverageOn(true); FL_BRK; } - "/*verilator lint_off"[^*]*"*/" { FL_FWD; PARSEP->verilatorCmtLint(yytext, true); FL_BRK; } - "/*verilator lint_on"[^*]*"*/" { FL_FWD; PARSEP->verilatorCmtLint(yytext, false); FL_BRK; } - "/*verilator lint_restore*/" { FL_FWD; PARSEP->verilatorCmtLintRestore(); FL_BRK; } - "/*verilator lint_save*/" { FL_FWD; PARSEP->verilatorCmtLintSave(); FL_BRK; } - "/*verilator tag"[^*]*"*/" { FL_FWD; PARSEP->tag(yytext); FL_BRK; } "/**/" { FL_FWD; FL_BRK; } "/*"[^*]+"*/" { FL_FWD; PARSEP->verilatorCmtBad(yytext); FL_BRK; } diff --git a/src/verilog.y b/src/verilog.y index 56c02eeea..f6ca0717b 100644 --- a/src/verilog.y +++ b/src/verilog.y @@ -398,6 +398,7 @@ class AstSenTree; // for example yP_ for punctuation based operators. // Double underscores "yX__Y" means token X followed by Y, // and "yX__ETC" means X folled by everything but Y(s). +//UNSUP %token yACCEPT_ON "accept_on" %token yALIAS "alias" %token yALWAYS "always" %token yALWAYS_COMB "always_comb" @@ -408,8 +409,11 @@ class AstSenTree; %token yASSIGN "assign" %token yASSUME "assume" %token yAUTOMATIC "automatic" +//UNSUP %token yBEFORE "before" %token yBEGIN "begin" %token yBIND "bind" +//UNSUP %token yBINS "bins" +//UNSUP %token yBINSOF "binsof" %token yBIT "bit" %token yBREAK "break" %token yBUF "buf" @@ -420,43 +424,57 @@ class AstSenTree; %token yCASEX "casex" %token yCASEZ "casez" %token yCHANDLE "chandle" +//UNSUP %token yCHECKER "checker" %token yCLASS "class" +//UNSUP %token yCLOCK "clock" %token yCLOCKING "clocking" %token yCMOS "cmos" +//UNSUP %token yCONSTRAINT "constraint" %token yCONST__ETC "const" %token yCONST__LEX "const-in-lex" +//UNSUP %token yCONST__LOCAL "const-then-local" %token yCONST__REF "const-then-ref" %token yCONTEXT "context" %token yCONTINUE "continue" %token yCOVER "cover" +//UNSUP %token yCOVERGROUP "covergroup" +//UNSUP %token yCOVERPOINT "coverpoint" +//UNSUP %token yCROSS "cross" %token yDEASSIGN "deassign" %token yDEFAULT "default" %token yDEFPARAM "defparam" %token yDISABLE "disable" +//UNSUP %token yDIST "dist" %token yDO "do" %token yEDGE "edge" %token yELSE "else" %token yEND "end" %token yENDCASE "endcase" +//UNSUP %token yENDCHECKER "endchecker" %token yENDCLASS "endclass" %token yENDCLOCKING "endclocking" %token yENDFUNCTION "endfunction" %token yENDGENERATE "endgenerate" +//UNSUP %token yENDGROUP "endgroup" %token yENDINTERFACE "endinterface" %token yENDMODULE "endmodule" %token yENDPACKAGE "endpackage" %token yENDPRIMITIVE "endprimitive" %token yENDPROGRAM "endprogram" %token yENDPROPERTY "endproperty" +//UNSUP %token yENDSEQUENCE "endsequence" %token yENDSPECIFY "endspecify" %token yENDTABLE "endtable" %token yENDTASK "endtask" %token yENUM "enum" %token yEVENT "event" +//UNSUP %token yEVENTUALLY "eventually" +//UNSUP %token yEXPECT "expect" %token yEXPORT "export" %token yEXTENDS "extends" %token yEXTERN "extern" %token yFINAL "final" +//UNSUP %token yFIRST_MATCH "first_match" %token yFOR "for" %token yFORCE "force" %token yFOREACH "foreach" @@ -464,6 +482,9 @@ class AstSenTree; %token yFORK "fork" %token yFORKJOIN "forkjoin" %token yFUNCTION "function" +//UNSUP %token yFUNCTION__ETC "function" +//UNSUP %token yFUNCTION__LEX "function-in-lex" +//UNSUP %token yFUNCTION__aPUREV "function-is-pure-virtual" %token yGENERATE "generate" %token yGENVAR "genvar" %token yGLOBAL__CLOCKING "global-then-clocking" @@ -471,7 +492,10 @@ class AstSenTree; %token yGLOBAL__LEX "global-in-lex" %token yIF "if" %token yIFF "iff" +//UNSUP %token yIGNORE_BINS "ignore_bins" +//UNSUP %token yILLEGAL_BINS "illegal_bins" %token yIMPLEMENTS "implements" +//UNSUP %token yIMPLIES "implies" %token yIMPORT "import" %token yINITIAL "initial" %token yINOUT "inout" @@ -479,23 +503,29 @@ class AstSenTree; %token yINSIDE "inside" %token yINT "int" %token yINTEGER "integer" +//UNSUP %token yINTERCONNECT "interconnect" %token yINTERFACE "interface" +//UNSUP %token yINTERSECT "intersect" %token yJOIN "join" %token yJOIN_ANY "join_any" %token yJOIN_NONE "join_none" +//UNSUP %token yLET "let" %token yLOCALPARAM "localparam" %token yLOCAL__COLONCOLON "local-then-::" %token yLOCAL__ETC "local" %token yLOCAL__LEX "local-in-lex" %token yLOGIC "logic" %token yLONGINT "longint" +//UNSUP %token yMATCHES "matches" %token yMODPORT "modport" %token yMODULE "module" %token yNAND "nand" %token yNEGEDGE "negedge" +//UNSUP %token yNETTYPE "nettype" %token yNEW__ETC "new" %token yNEW__LEX "new-in-lex" %token yNEW__PAREN "new-then-paren" +//UNSUP %token yNEXTTIME "nexttime" %token yNMOS "nmos" %token yNOR "nor" %token yNOT "not" @@ -520,11 +550,13 @@ class AstSenTree; %token yRAND "rand" %token yRANDC "randc" %token yRANDCASE "randcase" +//UNSUP %token yRANDSEQUENCE "randsequence" %token yRCMOS "rcmos" %token yREAL "real" %token yREALTIME "realtime" %token yREF "ref" %token yREG "reg" +//UNSUP %token yREJECT_ON "reject_on" %token yRELEASE "release" %token yREPEAT "repeat" %token yRESTRICT "restrict" @@ -535,20 +567,38 @@ class AstSenTree; %token yRTRANIF0 "rtranif0" %token yRTRANIF1 "rtranif1" %token ySCALARED "scalared" +//UNSUP %token ySEQUENCE "sequence" %token ySHORTINT "shortint" %token ySHORTREAL "shortreal" %token ySIGNED "signed" +//UNSUP %token ySOFT "soft" +//UNSUP %token ySOLVE "solve" %token ySPECIFY "specify" %token ySPECPARAM "specparam" +//UNSUP %token ySTATIC__CONSTRAINT "static-then-constraint" %token ySTATIC__ETC "static" +//UNSUP %token ySTATIC__LEX "static-in-lex" %token ySTRING "string" +//UNSUP %token ySTRONG "strong" %token ySTRUCT "struct" %token ySUPER "super" %token ySUPPLY0 "supply0" %token ySUPPLY1 "supply1" +//UNSUP %token ySYNC_ACCEPT_ON "sync_accept_on" +//UNSUP %token ySYNC_REJECT_ON "sync_reject_on" +//UNSUP %token yS_ALWAYS "s_always" +//UNSUP %token yS_EVENTUALLY "s_eventually" +//UNSUP %token yS_NEXTTIME "s_nexttime" +//UNSUP %token yS_UNTIL "s_until" +//UNSUP %token yS_UNTIL_WITH "s_until_with" %token yTABLE "table" +//UNSUP %token yTAGGED "tagged" %token yTASK "task" +//UNSUP %token yTASK__ETC "task" +//UNSUP %token yTASK__LEX "task-in-lex" +//UNSUP %token yTASK__aPUREV "task-is-pure-virtual" %token yTHIS "this" +//UNSUP %token yTHROUGHOUT "throughout" %token yTIME "time" %token yTIMEPRECISION "timeprecision" %token yTIMEUNIT "timeunit" @@ -568,6 +618,9 @@ class AstSenTree; %token yUNIQUE "unique" %token yUNIQUE0 "unique0" %token yUNSIGNED "unsigned" +//UNSUP %token yUNTIL "until" +//UNSUP %token yUNTIL_WITH "until_with" +//UNSUP %token yUNTYPED "untyped" %token yVAR "var" %token yVECTORED "vectored" %token yVIRTUAL__CLASS "virtual-then-class" @@ -577,9 +630,18 @@ class AstSenTree; %token yVIRTUAL__anyID "virtual-then-identifier" %token yVOID "void" %token yWAIT "wait" +//UNSUP %token yWAIT_ORDER "wait_order" %token yWAND "wand" +//UNSUP %token yWEAK "weak" %token yWHILE "while" +//UNSUP %token yWILDCARD "wildcard" %token yWIRE "wire" +//UNSUP %token yWITHIN "within" +//UNSUP %token yWITH__BRA "with-then-[" +//UNSUP %token yWITH__CUR "with-then-{" +//UNSUP %token yWITH__ETC "with" +//UNSUP %token yWITH__LEX "with-in-lex" +//UNSUP %token yWITH__PAREN "with-then-(" %token yWOR "wor" %token yWREAL "wreal" %token yXNOR "xnor" @@ -741,6 +803,7 @@ class AstSenTree; %token yP_SSRIGHT ">>>" %token yP_POW "**" +//UNSUP %token yP_PAR__IGNORE "(-ignored" // Used when sequence_expr:expr:( is ignored %token yP_PAR__STRENGTH "(-for-strength" %token yP_LTMINUSGT "<->" @@ -752,6 +815,8 @@ class AstSenTree; %token yP_ASTGT "*>" %token yP_ANDANDAND "&&&" %token yP_POUNDPOUND "##" +//UNSUP %token yP_POUNDMINUSPD "#-#" +//UNSUP %token yP_POUNDEQPD "#=#" %token yP_DOTSTAR ".*" %token yP_ATAT "@@" @@ -763,6 +828,7 @@ class AstSenTree; %token yP_BRASTAR "[*" %token yP_BRAEQ "[=" %token yP_BRAMINUSGT "[->" +//UNSUP %token yP_BRAPLUSKET "[+]" %token yP_PLUSPLUS "++" %token yP_MINUSMINUS "--" @@ -783,11 +849,43 @@ class AstSenTree; // '( is not a operator, as "' (" is legal //******************** +// Verilog op precedence +//UNSUP %token prUNARYARITH +//UNSUP %token prREDUCTION +//UNSUP %token prNEGATION +//UNSUP %token prEVENTBEGIN +//UNSUP %token prTAGGED + // These prevent other conflicts %left yP_ANDANDAND +//UNSUP %left yMATCHES +//UNSUP %left prTAGGED +//UNSUP %left prSEQ_CLOCKING // PSL op precedence + +// Lowest precedence +// These are in IEEE 17.7.1 +//UNSUP %nonassoc yALWAYS yS_ALWAYS yEVENTUALLY yS_EVENTUALLY yACCEPT_ON yREJECT_ON ySYNC_ACCEPT_ON ySYNC_REJECT_ON + %right yP_ORMINUSGT yP_OREQGT +//UNSUP %right yP_ORMINUSGT yP_OREQGT yP_POUNDMINUSPD yP_POUNDEQPD +//UNSUP %right yUNTIL yS_UNTIL yUNTIL_WITH yS_UNTIL_WITH yIMPLIES +//UNSUP %right yIFF +//UNSUP %left yOR +//UNSUP %left yAND +//UNSUP %nonassoc yNOT yNEXTTIME yS_NEXTTIME +//UNSUP %left yINTERSECT +//UNSUP %left yWITHIN +//UNSUP %right yTHROUGHOUT +//UNSUP %left prPOUNDPOUND_MULTI +//UNSUP %left yP_POUNDPOUND +//UNSUP %left yP_BRASTAR yP_BRAEQ yP_BRAMINUSGT yP_BRAPLUSKET + +// Not specified, but needed higher than yOR, lower than normal non-pexpr expressions +//UNSUP %left yPOSEDGE yNEGEDGE yEDGE + +//UNSUP %left '{' '}' // Verilog op precedence %right yP_MINUSGT yP_LTMINUSGT @@ -799,6 +897,7 @@ class AstSenTree; %left '&' yP_NAND %left yP_EQUAL yP_NOTEQUAL yP_CASEEQUAL yP_CASENOTEQUAL yP_WILDEQUAL yP_WILDNOTEQUAL %left '>' '<' yP_GTE yP_LTE yP_LTE__IGNORE yINSIDE +//UNSUP yDIST in above %left yP_SLEFT yP_SRIGHT yP_SSRIGHT %left '+' '-' %left '*' '/' '%'