anchor.diff:  
   mode DQ_GSTRING_MODE;
   GStringEnd
  -    :   '"'     -> popMode
  +    :   GStringQuotationMark     -> popMode
       ;
   GStringPart
       :   Dollar  -> pushMode(GSTRING_TYPE_SELECTOR_MODE)
  
positive.code: 
  
  // §3.10.5 String Literals
  
  StringLiteral
      :   '"'      DqStringCharacter*?           '"'
      |   '\''     SqStringCharacter*?           '\''
  
      |   Slash      { this.isRegexAllowed() && _input.LA(1) != '*' }?
                   SlashyStringCharacter+?       Slash
  
      |   TdqStringQuotationMark    TdqStringCharacter*?          TdqStringQuotationMark
      |   TsqStringQuotationMark TsqStringCharacter*?          TsqStringQuotationMark
      |   DollarSlashyGStringQuotationMarkBegin     DollarSlashyStringCharacter+? DollarSlashyGStringQuotationMarkEnd
      ;
  
  // Groovy gstring
  GStringBegin
      :   '"' 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)
  
negative.code: fragment
  Dollar
      :   '$'
      ;
  
  fragment
  GStringQuotationMark
      :   '"'
      ;
  
  fragment
  SqStringQuotationMark
      :   '\''
      ;
  
  fragment
  