anchor.diff:    |  t_END
     ;
   
  +access :
  +     paren_access (t_FILLER? t_DOT t_FILLER? paren_access)*
  +  ;
  +
  +paren_access :
  +     cell_access (t_FILLER? t_LPAREN t_FILLER? (arg_list t_FILLER?)? t_RPAREN)?
  +  ;
  +
  +cell_access :
  +     name (t_FILLER? t_LCURLY t_FILLER? arg_list t_FILLER? t_RCURLY)*
  +  |  {!(inSquare() || inCurly())}? name t_FILLER? t_AT t_FILLER? name
  +  |  {inSquare() || inCurly()}? name t_AT name //TODO-AC: fix error message for name AT FILLER name case
  +  ;
  +
   arg_list :  
        arg (t_FILLER? t_COMMA t_FILLER? arg)*
     ;
  
positive.code:              isPrefixOperator(prevToken) || isPostfixOperator(nextToken) ||
               isLParen(prevToken) || isRParen(nextToken));
  }
  }
  
  @lexer::header {
  
negative.code:  * to be a column delimiter.
   */
  private boolean isElementSeparator() {
      if(!(inCurly() || inSquare())) {
          return false;
      }
      Token prevToken = input.LT(-1);
      Token nextToken = input.LT(2); //2, not 1 because we haven't matched the FILLER yet
      switch(nextToken.getType()) {
  