anchor.diff:  
   // ESL statement
   statement_item
  -  : blocking_assignment SEMI
  -  | nonblocking_assignment SEMI
  -  | procedural_continuous_assignment SEMI
  +  : procedural_continuous_assignment SEMI
     | case_statement
     | conditional_statement
     | disable_statement
  
positive.code:   | randsequence_statement
    | randcase_statement
    | expect_property_statement
    // FIXME this is too relaxed. The grammar allows just a couple of expressions to be statements.
    | expression SEMI
    ;
  
  concurrent_assertion_item
  
negative.code:   : (
        unary_operator attribute_instances term
  
        // TODO should the post-increment/decrement be similar to the below?
      | inc_or_dec_expression
  
        // scoped randomize call
      | (KW_STD COLON2)? KW_RANDOMIZE randomize_call_expr
  
      | postfix_expr
  
    ) inside_expression?
    ;
  
  postfix_expr
    :
      // randomize method call
      primary DOT KW_RANDOMIZE randomize_call_expr
  
      // function call with paramlist and optional lambda (and optional chained call)
    | primary LPAREN list_of_arguments RPAREN array_lambda? (DOT expression)?
  
      // function call without paramlist but with lambda (and optional chained call)
    | primary array_lambda (DOT expression)?
  
      // chained call or member lookup
    | primary DOT expression
  
      // package or class scope resolution
    | primary COLON2 expression
  
      // array subscript
    | primary (LSQUARE expression (COLON expression)? RSQUARE)+ (DOT expression)?
  
      // either simple primary expression or function call with no paramlist and no lambda.
    | primary
    ;
  
  array_lambda
  