anchor.diff:  
   mode DQ_GSTRING_MODE;
   GStringEnd
  -    :   '"'     -> popMode
  +    :   GStringQuotationMark     -> popMode
       ;
   GStringPart
       :   Dollar  -> pushMode(GSTRING_TYPE_SELECTOR_MODE)
  
positive.code: // character in the triple double quotation string. e.g. """a"""
  fragment TdqStringCharacter
      :   ~["\\$]
      |   '"' { !(_input.LA(1) == '"' && _input.LA(2) == '"') }?
      |   EscapeSequence
      ;
  
  // character in the triple single quotation string. e.g. '''a'''
  fragment TsqStringCharacter
      :   ~['\\]
      |   '\'' { !(_input.LA(1) == '\'' && _input.LA(2) == '\'') }?
      |   EscapeSequence
      ;
  
  
negative.code: 
  
  // §3.10.5 String Literals
  StringLiteral
      :   GStringQuotationMark    DqStringCharacter*? GStringQuotationMark
      |   SqStringQuotationMark   SqStringCharacter*? SqStringQuotationMark
  
      |   Slash      { this.isRegexAllowed() && _input.LA(1) != '*' }?
                   SlashyStringCharacter+?       Slash
  
      |   TdqStringQuotationMark  TdqStringCharacter*?    TdqStringQuotationMark
      |   TsqStringQuotationMark  TsqStringCharacter*?    TsqStringQuotationMark
      |   DollarSlashyGStringQuotationMarkBegin   DollarSlashyStringCharacter+?   DollarSlashyGStringQuotationMarkEnd
      ;
  
  // Groovy gstring
  GStringBegin
      :   GStringQuotationMark DqStringCharacter*? Dollar -> pushMode(DQ_GSTRING_MODE), pushMode(GSTRING_TYPE_SELECTOR_MODE)
      ;
  TdqGStringBegin
      :   TdqStringQuotationMark   TdqStringCharacter*? Dollar -> type(GStringBegin), pushMode(TDQ_GSTRING_MODE), pushMode(GSTRING_TYPE_SELECTOR_MODE)
  