private String parseMultilineString(char q, boolean raw, boolean bytes) {
    StringBuilder b = new StringBuilder(256);
    char ch = get();
    while (true) {
      if (ch == 0) {
        throw new ParserException("EOF while scanning triple-quoted string literal");
      }
      if (ch == q) {
        if (get() == q) {
          if (get() == q) {
            break;
          }
          index -= 1;
        }
        index -= 1;
      }
      if (ch == '\\') {
        if (raw) {
          b.append(ch);
          ch = get();
          if (ch == 0) {
            throw new ParserException("EOF while scanning triple-quoted string literal"); // TODO refactor
          }
        } else {
          ch = get();
          if (ch == '\n') {
            ch = get();
            continue;
          }
          index -= 1;
          ch = parseStringEscape(bytes);
        }
      }
      b.append(ch);
      ch = get();
    }
    value = b.toString();
    return "STR";
  }