anchor.diff:      : '0'..'9' | 'A'..'F' | 'a'..'f'
       ;
   
  +fragment
  +HighSurrogate
  +    : '\uD800'..'\uDBFF'
  +    ;
  +
  +fragment
  +LowSurrogate
  +    : '\uDC00'..'\uDFFF'
  +    ;
  +
   WS  
       :   (
                ' '
  
positive.code:     :   '"' StringPart '"'?
      ;
  
  fragment
  StringPart
      : ( ~ ('\\' | '"') | EscapeSequence) *
  
negative.code:     )
      ;
  
  /*
   Stef: we must take 32-bit code points into account here because AntLR considers each
   character to be 16-bit like in Java, which means that it will consider a high/low surrogate
   pair as two characters and refuse it in a character literal. So we match either a code point
   pair, or a normal 16-bit code point.
  */
  CHAR_LITERAL
      :   '`' (( HighSurrogate LowSurrogate ) | ( ~ ('`' | '\\') | EscapeSequence )) '`'
      ;
  
  QUOTED_LITERAL
  