From 87e813766a19773bb0dc6a14a78a3a43e1bb5f74 Mon Sep 17 00:00:00 2001 From: steve Date: Thu, 14 Jun 2007 03:50:00 +0000 Subject: [PATCH] Detect and ignore specify edge expressions --- lexor.lex | 20 ++++++++++++++++++-- parse.y | 56 ++++++++++++++++++++++++++++++++++--------------------- 2 files changed, 53 insertions(+), 23 deletions(-) diff --git a/lexor.lex b/lexor.lex index aaca91c42..ce157f863 100644 --- a/lexor.lex +++ b/lexor.lex @@ -21,7 +21,7 @@ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA */ #ifdef HAVE_CVS_IDENT -#ident "$Id: lexor.lex,v 1.95 2007/04/19 02:52:53 steve Exp $" +#ident "$Id: lexor.lex,v 1.96 2007/06/14 03:50:00 steve Exp $" #endif # include "config.h" @@ -109,6 +109,7 @@ static int comment_enter; %s UDPTABLE %x PPTIMESCALE %x PPDEFAULT_NETTYPE +%s EDGES W [ \t\b\f\r]+ @@ -167,7 +168,7 @@ W [ \t\b\f\r]+ with "*" and return that. */ "("{W}*"*"{W}*")" { return '*'; } - +"]" { BEGIN(0); return yytext[0]; } [}{;:\[\],()#=.@&!?<>%|^~+*/-] { return yytext[0]; } \" { BEGIN(CSTRING); } @@ -210,6 +211,17 @@ W [ \t\b\f\r]+ [pP] { return 'p'; } [01\?\*\-] { return yytext[0]; } +"01" { return K_edge_descriptor; } +"0x" { return K_edge_descriptor; } +"0z" { return K_edge_descriptor; } +"10" { return K_edge_descriptor; } +"1x" { return K_edge_descriptor; } +"1z" { return K_edge_descriptor; } +"x0" { return K_edge_descriptor; } +"x1" { return K_edge_descriptor; } +"z0" { return K_edge_descriptor; } +"z1" { return K_edge_descriptor; } + [a-zA-Z_][a-zA-Z0-9$_]* { int rc = lexor_keyword_code(yytext, yyleng); switch (rc) { @@ -230,6 +242,10 @@ W [ \t\b\f\r]+ } break; + case K_edge: + BEGIN(EDGES); + break; + default: yylval.text = 0; break; diff --git a/parse.y b/parse.y index 4c598d4a8..507fa5f87 100644 --- a/parse.y +++ b/parse.y @@ -19,7 +19,7 @@ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA */ #ifdef HAVE_CVS_IDENT -#ident "$Id: parse.y,v 1.238 2007/06/04 02:19:07 steve Exp $" +#ident "$Id: parse.y,v 1.239 2007/06/14 03:50:00 steve Exp $" #endif # include "config.h" @@ -157,7 +157,8 @@ static list* list_from_identifier(list*tmp, char*id) %token K_LOR K_LAND K_NAND K_NOR K_NXOR K_TRIGGER %token K_always K_and K_assign K_begin K_bool K_buf K_bufif0 K_bufif1 K_case %token K_casex K_casez K_cmos K_deassign K_default K_defparam K_disable -%token K_edge K_else K_end K_endcase K_endfunction K_endgenerate K_endmodule +%token K_edge K_edge_descriptor +%token K_else K_end K_endcase K_endfunction K_endgenerate K_endmodule %token K_endprimitive K_endspecify K_endtable K_endtask K_event K_for %token K_force K_forever K_fork K_function K_generate K_genvar %token K_highz0 K_highz1 K_if K_ifnone @@ -2758,25 +2759,38 @@ spec_polarity ; spec_reference_event - : K_posedge expression - { delete $2; } - | K_negedge expression - { delete $2; } - | K_posedge expr_primary K_TAND expression - { delete $2; - delete $4; - } - | K_negedge expr_primary K_TAND expression - { delete $2; - delete $4; - } - | expr_primary K_TAND expression - { delete $1; - delete $3; - } - | expr_primary - { delete $1; } - ; + : K_posedge expression + { delete $2; } + | K_negedge expression + { delete $2; } + | K_posedge expr_primary K_TAND expression + { delete $2; + delete $4; + } + | K_negedge expr_primary K_TAND expression + { delete $2; + delete $4; + } + | K_edge '[' edge_descriptor_list ']' expr_primary K_TAND expression + { delete $5; + delete $7; + } + | expr_primary K_TAND expression + { delete $1; + delete $3; + } + | expr_primary + { delete $1; } + ; + + /* The edge_descriptor is detected by the lexor as the various + 2-letter edge sequences that are supported here. For now, we + don't care what they are, because we do not yet support specify + edge events. */ +edge_descriptor_list + : edge_descriptor_list ',' K_edge_descriptor + | K_edge_descriptor + ; spec_notifier_opt : /* empty */