// $ANTLR start "STRING_LITERAL"
  public final void mSTRING_LITERAL() throws RecognitionException {
    try {
      int _type = STRING_LITERAL;
      int _channel = DEFAULT_TOKEN_CHANNEL;
      int c;

      // TWS_VARIABLES.g:51:3: ( '\"' (c=~ ( '\"' | '\\r' | '\\n' ) )* '\"' )
      // TWS_VARIABLES.g:51:5: '\"' (c=~ ( '\"' | '\\r' | '\\n' ) )* '\"'
      {
        match('\"');
        StringBuilder b = new StringBuilder();
        // TWS_VARIABLES.g:53:5: (c=~ ( '\"' | '\\r' | '\\n' ) )*
        loop1:
        while (true) {
          int alt1 = 2;
          int LA1_0 = input.LA(1);
          if (((LA1_0 >= '\u0000' && LA1_0 <= '\t')
              || (LA1_0 >= '\u000B' && LA1_0 <= '\f')
              || (LA1_0 >= '\u000E' && LA1_0 <= '!')
              || (LA1_0 >= '#' && LA1_0 <= '\uFFFF'))) {
            alt1 = 1;
          }

          switch (alt1) {
            case 1:
              // TWS_VARIABLES.g:53:7: c=~ ( '\"' | '\\r' | '\\n' )
              {
                c = input.LA(1);
                if ((input.LA(1) >= '\u0000' && input.LA(1) <= '\t')
                    || (input.LA(1) >= '\u000B' && input.LA(1) <= '\f')
                    || (input.LA(1) >= '\u000E' && input.LA(1) <= '!')
                    || (input.LA(1) >= '#' && input.LA(1) <= '\uFFFF')) {
                  input.consume();
                } else {
                  MismatchedSetException mse = new MismatchedSetException(null, input);
                  recover(mse);
                  throw mse;
                }
                b.appendCodePoint(c);
              }
              break;

            default:
              break loop1;
          }
        }

        match('\"');
        setText(b.toString());
      }

      state.type = _type;
      state.channel = _channel;
    } finally {
      // do for sure before leaving
    }
  }
 public String show() {
   StringBuilder buf = new StringBuilder();
   if (imports != null) buf.append(" : " + imports);
   for (String name : templates.keySet()) {
     CompiledST c = rawGetTemplate(name);
     if (c.isAnonSubtemplate || c == NOT_FOUND_ST) continue;
     int slash = name.lastIndexOf('/');
     name = name.substring(slash + 1, name.length());
     buf.append(name);
     buf.append('(');
     if (c.formalArguments != null)
       buf.append(Misc.join(c.formalArguments.values().iterator(), ","));
     buf.append(')');
     buf.append(" ::= <<" + Misc.newline);
     buf.append(c.template + Misc.newline);
     buf.append(">>" + Misc.newline);
   }
   return buf.toString();
 }