anchor.diff:  
   fragment NOT_LINE_TERMINATOR : ~('\r' | '\n');
   COMMENT : '%' | '%' ~'{' NOT_LINE_TERMINATOR* { $channel=HIDDEN; };
  -ELLIPSIS_COMMENT : '...' NOT_LINE_TERMINATOR* LINE_TERMINATOR;
   
   LINE_TERMINATOR : '\r' '\n' | '\r' | '\n';
  -OTHER_WHITESPACE : (' ' | '\t' | '\f')+;
  +
  +fragment ELLIPSIS_COMMENT : '...' NOT_LINE_TERMINATOR* LINE_TERMINATOR;
  +fragment OTHER_WHITESPACE : (' ' | '\t' | '\f')+;
  +FILLER : (ELLIPSIS_COMMENT | OTHER_WHITESPACE)+;
  
positive.code:   ;
  
  row_separator :
       LINE_TERMINATOR filler*
    |  SEMICOLON filler*
    ;
  
  element_list :
  
negative.code: //all binary operators are left associative so no special handling is required
  expr :
       short_or_expr
    |  AT FILLER? input_params expr
    ;
  
  short_or_expr :
       short_and_expr (SHORTOR FILLER? short_and_expr)*
    ;
  
  short_and_expr :
       or_expr (SHORTAND FILLER? or_expr)*
  
    ;
  
  or_expr :
       and_expr (OR FILLER? and_expr)*
    ;
  
  and_expr :
       comp_expr (AND FILLER? comp_expr)*
    ;
  
  comp_expr :
       colon_expr ((LT | GT | LE | GE | EQ | NE) FILLER? colon_expr)*
    ;
  
  colon_expr :
       plus_expr (COLON FILLER? plus_expr (COLON FILLER? plus_expr)?)?
    ;
  
  plus_expr :
       binary_expr ((PLUS | MINUS) FILLER? binary_expr)*
    ;
  
  binary_expr :
       prefix_expr ((MTIMES | ETIMES | MDIV | EDIV | MLDIV | ELDIV) FILLER? prefix_expr)*
    ;
  
  prefix_expr :
       pow_expr
    |  NOT FILLER? prefix_expr
    |  PLUS FILLER? prefix_expr
    |  MINUS FILLER? prefix_expr
    ;
  
  pow_expr :
       postfix_expr ((MPOW | EPOW) FILLER? postfix_expr)*
    ;
  
  postfix_expr :
       primary_expr ((ARRAYTRANSPOSE | MTRANSPOSE) FILLER?)*
    ;
  
  primary_expr :
       literal
    |  LPAREN FILLER? expr RPAREN FILLER?
    |  matrix
    |  cell_array
    |  access
    |  AT FILLER? name
    ;
  
  access :
       cell_access (LPAREN FILLER? arg_list? RPAREN FILLER?)?
    ;
  
  cell_access :
       (var_access) (LCURLY FILLER? arg_list RCURLY FILLER?)*
    |  name AT FILLER? name
    ;
    
  var_access :
       (name) (DOT FILLER? name)*
    ;
  
  arg_list :	
       (arg) (COMMA FILLER? arg)*
    ;
    
  arg :
       expr
    |  COLON FILLER?
    ;
  
  literal :
       NUMBER FILLER?
    |  STRING FILLER?
    ;
  
  matrix :
       LSQUARE FILLER? optional_row_list RSQUARE FILLER?
    ;
  
  cell_array :
       LCURLY FILLER? optional_row_list RCURLY FILLER?
    ;
  
  optional_row_list :
  