anchor.diff:      | 'var'
       ;
   
  -IDENTIFIER
  -    : LETTER ( LETTER | UNICODE_DIGIT )*
  -    ;
  -
  +
  +// Operators
  +
  +//binary_op  = "||" | "&&" | rel_op | add_op | mul_op .
  +BINARY_OP
  +    : '||' | '&&' | REL_OP | ADD_OP | MUL_OP
  +    ;
  +
  +//rel_op     = "==" | "!=" | "<" | "<=" | ">" | ">=" .
  +fragment REL_OP
  +    : '=='
  +    | '!='
  +    | '<'
  +    | '<='
  +    | '>'
  +    | '>='
  +    ;
  +
  +//add_op     = "+" | "-" | "|" | "^" .
  +fragment ADD_OP
  +    : '+'
  +    | '-'
  +    | '|'
  +    | '^'
  +    ;
  +
  +//mul_op     = "*" | "/" | "%" | "<<" | ">>" | "&" | "&^" .
  +fragment MUL_OP
  +    : '*'
  +    | '/'
  +    | '%'
  +    | '<<'
  +    | '>>'
  +    | '&'
  +    | '&^'
  +    ;
  +
  +//unary_op   = "+" | "-" | "!" | "^" | "*" | "&" | "<-" .
  +fragment UNARY_OP
  +    : '+'
  +    | '-'
  +    | '!'
  +    | '^'
  +    | '*'
  +    | '&'
  +    | '<-'
  +    ;
  +
  +
  +// Integer literals
  +
  +//int_lit     = decimal_lit | octal_lit | hex_lit .
  +INT_LIT
  +    : DECIMAL_LIT
  +    | OCTAL_LIT
  +    | HEX_LIT
  +    ;
  +
  +//decimal_lit = ( "1" … "9" ) { decimal_digit } .
  +fragment DECIMAL_LIT
  +    : [1-9] DECIMAL_DIGIT*
  +    ;
  +
  +//octal_lit   = "0" { octal_digit } .
  +fragment OCTAL_LIT
  +    : '0' OCTAL_DIGIT*
  +    ;
  +
  +//hex_lit     = "0" ( "x" | "X" ) hex_digit { hex_digit } .
  +fragment HEX_LIT
  +    : '0' ( 'x' | 'X' ) HEX_DIGIT+
  +    ;
  +
  +
  +// Floating-point literals
  +
  +//float_lit = decimals "." [ decimals ] [ exponent ] |
  +//            decimals exponent |
  +//            "." decimals [ exponent ] .
  +FLOAT_LIT
  +    : DECIMALS '.' DECIMALS? EXPONENT?
  +    | DECIMALS EXPONENT
  +    | '.' DECIMALS EXPONENT?
  +    ;
  +
  +//decimals  = decimal_digit { decimal_digit } .
  +fragment DECIMALS
  +    : DECIMAL_DIGIT+
  +    ;
  +
  +//exponent  = ( "e" | "E" ) [ "+" | "-" ] decimals .
  +fragment EXPONENT
  +    : ( 'e' | 'E' ) ( '+' | '-' )? DECIMALS
  +    ;
  +
  +// Imaginary literals
  +//imaginary_lit = (decimals | float_lit) "i" .
  +IMAGINARY_LIT
  +    : (DECIMALS | FLOAT_LIT) 'i'
  +    ;
  +
  +
  +// Rune literals
   
   //rune_lit         = "'" ( unicode_value | byte_value ) "'" .
   RUNE_LIT
       : '\'' ( UNICODE_VALUE | BYTE_VALUE ) '\''
  -    ;
  -
  -
  -//string_lit             = raw_string_lit | interpreted_string_lit .
  -//raw_string_lit         = "`" { unicode_char | newline } "`" .
  -//interpreted_string_lit = `"` { unicode_value | byte_value } `"` .
  -STRING_LIT
  -    : RAW_STRING_LIT
  -    | INTERPRETED_STRING_LIT
  -    ;
  -
  -fragment RAW_STRING_LIT
  -//    : '`' ( UNICODE_CHAR | NEWLINE )* '`'
  -    : '`' ( RAW_STRING_CHAR | NEWLINE )* '`'
  -    ;
  -
  -fragment INTERPRETED_STRING_LIT
  -//    : '"' ( UNICODE_VALUE | BYTE_VALUE )* '"'
  -    : '"' ( STRING_CHAR | BYTE_VALUE )* '"'
  -    ;
  -
  -fragment STRING_CHAR
  -    : ~["\\]
  -    | LITTLE_U_VALUE
  -    | BIG_U_VALUE
  -    | ESCAPED_CHAR
  -    ;
  -
  -fragment RAW_STRING_CHAR
  -    : ~[`]
  -    | LITTLE_U_VALUE
  -    | BIG_U_VALUE
  -    | ESCAPED_CHAR
       ;
   
   //unicode_value    = unicode_char | little_u_value | big_u_value | escaped_char .
  
positive.code: /*
   [The "BSD licence"]
   Copyright (c) 2016 Sasa Coh
   All rights reserved.
  
   Redistribution and use in source and binary forms, with or without
  
negative.code:     | ESCAPED_CHAR
      ;
  
  //byte_value       = octal_byte_value | hex_byte_value .
  fragment BYTE_VALUE
      : OCTAL_BYTE_VALUE | HEX_BYTE_VALUE
      ;
  
  //octal_byte_value = `\` octal_digit octal_digit octal_digit .
  fragment OCTAL_BYTE_VALUE
      : '\\' OCTAL_DIGIT OCTAL_DIGIT OCTAL_DIGIT
      ;
  
  //hex_byte_value   = `\` "x" hex_digit hex_digit .
  fragment HEX_BYTE_VALUE
      : '\\' 'x' HEX_DIGIT HEX_DIGIT
      ;
  
  //little_u_value   = `\` "u" hex_digit hex_digit hex_digit hex_digit .
  //                           hex_digit hex_digit hex_digit hex_digit .
  LITTLE_U_VALUE
      : '\\u' HEX_DIGIT HEX_DIGIT HEX_DIGIT HEX_DIGIT
      ;
  
  //big_u_value      = `\` "U" hex_digit hex_digit hex_digit hex_digit
  BIG_U_VALUE
      : '\\U' HEX_DIGIT HEX_DIGIT HEX_DIGIT HEX_DIGIT HEX_DIGIT HEX_DIGIT HEX_DIGIT HEX_DIGIT
      ;
  
  //escaped_char     = `\` ( "a" | "b" | "f" | "n" | "r" | "t" | "v" | `\` | "'" | `"` ) .
  