anchor.diff:    ;
   
   element_list :
  -     element (element_separator_list element)*
  +     element (element_separator_list element2)*
     ;
   
   element :
  -     expr
  +     expr_in_array
  +  ;
  +
  +element2 :
  +     expr_in_array2
     ;
   
   //non-empty
  
positive.code:              isPrefixOperator(prevToken) || isPostfixOperator(nextToken) ||
               isLParen(prevToken) || isRParen(nextToken));
  }
  
  private final java.util.Stack<Integer> bracketStack = new java.util.Stack<Integer>();
  private boolean inParens() { return !bracketStack.isEmpty() && bracketStack.peek() == LPAREN; }
  private boolean inCurly() { return !bracketStack.isEmpty() && bracketStack.peek() == LCURLY; }
  private boolean inSquare() { return !bracketStack.isEmpty() && bracketStack.peek() == LSQUARE; }
  }
  
  @lexer::header {
  
negative.code:   |  t_END
    ;
  
  arg_list :  
       arg (t_FILLER? t_COMMA t_FILLER? arg)*
    ;
  