anchor.diff:  
   mode TDQ_GSTRING_MODE;
   TdqGStringEnd
  -    :   '"""'    -> type(GStringEnd), popMode
  +    :   TdqStringQuotationMark    -> type(GStringEnd), popMode
       ;
   TdqGStringPart
       :   Dollar   -> type(GStringPart), pushMode(GSTRING_TYPE_SELECTOR_MODE)
  
positive.code:     |   Slash      { this.isRegexAllowed() && _input.LA(1) != '*' }?
                   SlashyStringCharacter+?       Slash
  
      |   '"""'    TdqStringCharacter*?          '"""'
      |   '\'\'\'' TsqStringCharacter*?          '\'\'\''
      |   '$/'     DollarSlashyStringCharacter+? '/$'
      ;
  
  // Groovy gstring
  
negative.code:     ;
  
  fragment
  TdqStringQuotationMark
      :   '"""'
      ;
  
  fragment
  TsqStringQuotationMark
      :   '\'\'\''
      ;
  
  fragment
  DollarSlashyGStringQuotationMarkBegin
      :   '$/'
      ;
  
  fragment
  DollarSlashyGStringQuotationMarkEnd
      :   '/$'
      ;
  
  fragment
  DollarSlashEscape
      :   '$/$'
      ;
  
  fragment
  DollarDollarEscape
      :   '$$'
      ;
  
  // §3.10.7 The Null Literal
  NullLiteral
      :   'null'
      ;
  