errata/63: Grammar ambiguity in delay_or_event_control

From: Daryl.Stewart@cl.cam.ac.uk
Date: Mon Dec 03 2001 - 07:25:49 PST


Precedence: bulk

<p>>Number: 63
>Category: errata
>Originator: Daryl Stewart
>Description:

A grammatical ambiguity can arise in assignments which include the production

delay_or_event_control expression

ince

delay_or_event_control ::=
    delay_control
  | event_control
  | repeat ( expression ) event_control

delay_control ::=
    # delay_value
  | # ( mintypmax_expression )

delay_value ::=
    unsigned_number
  | parameter_identifier
  | specparam_identifier
  | mintypmax_expression

mintypmax_expression ::=
    expression
  | expression : expression : expression

Which allows, for example,
nonblocking_assignment ::= variable_lvalue <= [ delay_or_event_control ] expression
to produce
variable_lvalue <= # expression expression

EG
   l <= # a | b | c;
may be parsed as equivalent to:
   l <= #(a) ((| b) | c));
or:
   l <= #(a | b) (| c);

A solution is to define

delay_control ::=
    # unsigned_number
  | # parameter_identifier
  | # specparam_identifier
  | # ( mintypmax_expression )

Which forces delays given as expressions to be parenthesised, as is common practice.



This archive was generated by hypermail 2.1.4 : Mon Jul 08 2002 - 12:54:48 PDT and
sponsored by Boyd Technology, Inc.