anchor.diff:  //        )+ ;
   
   // ----------------------------------------------------------
  -//mode MODE_COMMENT;
  -
  -// ----------------------------------------------------------
  -mode MODE_CODE;
  +mode VineCode;
   END_OUTPUT_WS:  '}}' WS -> popMode ; 
   END_OUTPUT:     '}}' -> popMode ; 
   END_STMT:       '%}' -> popMode ; 
   
  -IF:             'if ' ;
  -ELSE:           'elif ' ;
  -ELIF:           'else' ;
  -END:            'end' ;
  -TRUE:           'true' ;
  -FALSE:          'false' ;
  -NULL:           'null' ;
  -AND:            '&&' ;
  -OR:             '||' ;
  -AND2:           ' and ' ;
  -OR2:            ' or ' ;
  -DOT:            '.' ;
  -COMMA:          ',' ;
  -LeftParen:      '(' ;
  -RightParen:     ')' ;
  -LeftBracket:    '[' ;
  -RightBracket:   ']' ;
  +// Keywords
  +IF:         'if ' ;
  +ELSE:       'elif ' ;
  +ELIF:       'else' ;
  +END:        'end' ;
  +TRUE:       'true' ;
  +FALSE:      'false' ;
  +NULL:       'null' ;
  +AND2:       ' and ' ;
  +OR2:        ' or ' ;
  +
  +AND:        '&&' ;
  +OR:         '||' ;
  +DOT:        '.' ;
  +COMMA:      ',' ;
  +LPAREN:     '(' ;
  +RPAREN:     ')' ;
  +LBRACK:     '[' ;
  +RBRACK:     ']' ;
   
   // unary op
   MINUS:  '-' ;
  
positive.code: lexer grammar VineLexer;
  
  tokens { TYPE_STMT_END }
  /*
   * Lexer Rules
   */
  
  //channels { WSCHANNEL, MYHIDDEN }
  
  // Default "mode": Everything that is outside of tags '{{ .. }}', '{% .. %}' or '{# .. #}'
  
  OUTPUT:         '{{' -> pushMode(MODE_CODE) ;
  STMT:           '{%' -> pushMode(MODE_CODE) ;
  //LINE_COMMENT:   '#' ~('#')*? NL -> channel(HIDDEN);
  BLOCK_COMMENT:  '{#' .*? '#}' ;
  
  
negative.code: 
  // From Harlowe:
  // This includes all forms of Unicode 6 whitespace except \n, \r, and Ogham space mark.
  //WS_CODE:    [ \f\t\v\u00a0\u2000-\u200a\u2028\u2029\u202f\u205f\u3000]+ -> skip ;
  WS_CODE:    [ \t]+ -> channel(HIDDEN) ;
  
  ERROR_CHAR: . ;
  
  // fragments
  fragment ESC:       '\\"' | '\\\\' ; // 2-char sequences \" and \\
  fragment DIGIT:     [0-9] ;
  fragment ID_LETTER: [A-Za-z\u0080-\uFFFF_] ; // goes from 41 ('A') to z then 128 to 65535 (unicode)
  