diff --git a/parse.y b/parse.y index 60cbeba07..bcbd50d78 100644 --- a/parse.y +++ b/parse.y @@ -19,7 +19,7 @@ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA */ #if !defined(WINNT) -#ident "$Id: parse.y,v 1.80 2000/01/01 23:47:58 steve Exp $" +#ident "$Id: parse.y,v 1.81 2000/01/02 01:59:52 steve Exp $" #endif # include "parse_misc.h" @@ -126,7 +126,7 @@ extern void lex_end_table(); %type expression expr_primary %type lavalue lpvalue -%type delay_value +%type delay_value delay_value_simple %type delay1 delay3 delay3_opt parameter_value_opt %type expression_list %type assign assign_list @@ -276,7 +276,7 @@ defparam_assign_list ; delay1 - : '#' delay_value + : '#' delay_value_simple { svector*tmp = new svector(1); (*tmp)[0] = $2; $$ = tmp; @@ -289,7 +289,7 @@ delay1 ; delay3 - : '#' delay_value + : '#' delay_value_simple { svector*tmp = new svector(1); (*tmp)[0] = $2; $$ = tmp; @@ -320,6 +320,22 @@ delay3_opt ; delay_value + : expression + { PExpr*tmp = $1; + if (! pform_expression_is_constant(tmp)) + yyerror(@1, "error: delay expression must " + "be constant."); + $$ = tmp; + } + | expression ':' expression ':' expression + { yyerror(@1, "sorry: (min:typ:max) not supported."); + $$ = $3; + delete $1; + delete $5; + } + ; + +delay_value_simple : NUMBER { verinum*tmp = $1; if (tmp == 0) { @@ -338,12 +354,6 @@ delay_value $$ = tmp; delete $1; } - | '(' expression ':' expression ':' expression ')' - { yyerror(@2, "sorry: (min:typ:max) not supported."); - $$ = $4; - delete $2; - delete $6; - } ; description @@ -1227,6 +1237,11 @@ parameter_assign_list parameter_value_opt : '#' '(' expression_list ')' { $$ = $3; } + | '#' error + { yyerror(@1, "error: syntax error in parameter value " + "assignment list."); + $$ = 0; + } | { $$ = 0; } ;