anchor.diff:  ADD             : '+';
   SUB             : '-';
   MUL             : '*';
  -DIV             : '/';
  +DIV             : Slash;
   BITAND          : '&';
   BITOR           : '|';
   XOR             : '^';
  
positive.code: 
  
  // §3.10.5 String Literals
  
  StringLiteral
      :   '"'      DqStringCharacter*?           '"'
      |   '\''     SqStringCharacter*?           '\''
  
      |   '/'      { this.isRegexAllowed() && _input.LA(1) != '*' }?
                   SlashyStringCharacter+?       '/'
  
      |   '"""'    TdqStringCharacter*?          '"""'
      |   '\'\'\'' TsqStringCharacter*?          '\'\'\''
      |   '$/'     DollarSlashyStringCharacter+? '/$'
      ;
  
  // Groovy gstring
  GStringBegin
      :   '"' DqStringCharacter*? DOLLAR -> pushMode(DQ_GSTRING_MODE), pushMode(GSTRING_TYPE_SELECTOR_MODE)
      ;
  TdqGStringBegin
      :   '"""'   TdqStringCharacter*? DOLLAR -> type(GStringBegin), pushMode(TDQ_GSTRING_MODE), pushMode(GSTRING_TYPE_SELECTOR_MODE)
      ;
  SlashyGStringBegin
      :   '/' { this.isRegexAllowed() && _input.LA(1) != '*' }? SlashyStringCharacter*? DOLLAR { isFollowedByJavaLetterInGString(_input) }? -> type(GStringBegin), pushMode(SLASHY_GSTRING_MODE), pushMode(GSTRING_TYPE_SELECTOR_MODE)
      ;
  DollarSlashyGStringBegin
      :   '$/' DollarSlashyStringCharacter*? DOLLAR { isFollowedByJavaLetterInGString(_input) }? -> type(GStringBegin), pushMode(DOLLAR_SLASHY_GSTRING_MODE), pushMode(GSTRING_TYPE_SELECTOR_MODE)
      ;
  
  mode DQ_GSTRING_MODE;
  GStringEnd
      :   '"'     -> popMode
      ;
  GStringPart
      :   DOLLAR  -> pushMode(GSTRING_TYPE_SELECTOR_MODE)
      ;
  GStringCharacter
      :   DqStringCharacter -> more
  
negative.code: 
  fragment
  Digit
      :   Zero
      |   NonZeroDigit
      ;
  
  