anchor.diff:      ;
   
   
  -fragment LETTER : UNICODE_LETTER | '_'
  -    ;
  -
  -fragment DECIMAL_DIGIT : [0-9]
  -    ;
  -
  -fragment OCTAL_DIGIT   : [0-7]
  -    ;
  -
  -fragment HEX_DIGIT     : [0-9a-fA-F]
  -    ;
  -
  -fragment NEWLINE        : [\u000A] ; /* the Unicode code point U+000A */
  -fragment UNICODE_CHAR   : ~[\u000A] ; /* an arbitrary Unicode code point except newline */
  -//UNICODE_LETTER : ; /* a Unicode code point classified as "Letter" */ .
  -//UNICODE_DIGIT  : ; /* a Unicode code point classified as "Number, decimal digit" */ .
  -
  +// String literals
  +
  +//string_lit             = raw_string_lit | interpreted_string_lit .
  +STRING_LIT
  +    : RAW_STRING_LIT
  +    | INTERPRETED_STRING_LIT
  +    ;
  +
  +//raw_string_lit         = "`" { unicode_char | newline } "`" .
  +fragment RAW_STRING_LIT
  +    : '`' ( UNICODE_CHAR | NEWLINE )* '`'
  +    ;
  +
  +//interpreted_string_lit = `"` { unicode_value | byte_value } `"` .
  +fragment INTERPRETED_STRING_LIT
  +    : '"' ( UNICODE_VALUE | BYTE_VALUE )* '"'
  +    ;
  +
  +
  +//
  +// Source code representation
  +//
  +
  +//letter        = unicode_letter | "_" .
  +fragment LETTER
  +    : UNICODE_LETTER
  +    | '_'
  +    ;
  +
  +//decimal_digit = "0" … "9" .
  +fragment DECIMAL_DIGIT
  +    : [0-9]
  +    ;
  +
  +//octal_digit   = "0" … "7" .
  +fragment OCTAL_DIGIT
  +    : [0-7]
  +    ;
  +
  +//hex_digit     = "0" … "9" | "A" … "F" | "a" … "f" .
  +fragment HEX_DIGIT
  +    : [0-9a-fA-F]
  +    ;
  +
  +//newline = /* the Unicode code point U+000A */ .
  +fragment NEWLINE
  +    : [\u000A]
  +    ;
  +
  +//unicode_char = /* an arbitrary Unicode code point except newline */ .
  +fragment UNICODE_CHAR   : ~[\u000A] ;
  +
  +//unicode_digit = /* a Unicode code point classified as "Number, decimal digit" */ .
   fragment UNICODE_DIGIT
    : [\u0030-\u0039]
    | [\u0660-\u0669]
  
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:     | 'var'
      ;
  
  
  // 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 ) '\''
      ;
  
  //unicode_value    = unicode_char | little_u_value | big_u_value | escaped_char .
  