anchor.diff:  // TODO bug #16, primary and method_call_root are mutually left-recursive in spec grammar.
   // FIXME method call root can be any expression really. E.g. obj.getchildren()[0].method();
   // See also: http://www.eda.org/svdb/view.php?id=1480
  -// Method calls really should be handled as postfix expressions, but that would mean rewriting the
  -// expression rules. Trying to stick close the the spec here, sigh.
   method_call_root
     : identifier (LPAREN list_of_arguments RPAREN)?
     ;
  
positive.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
  
      // 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
  
    ) inside_expression?
    ;
  
  array_lambda
  
negative.code:   | randsequence_statement
    | randcase_statement
    | expect_property_statement
    // NOTE this is too relaxed. The grammar allows just a couple of expressions to be statements.
    // Specifically inc_or_dec and calls.
    // Also this now replaces (un)blocking_assignment.
    | statement_expression SEMI
    ;
  
  concurrent_assertion_item
  