code: public DateTimeFormatterBuilder append(DateTimePrinter printer, DateTimeParser[] parsers) {
          if (printer != null) {
              checkPrinter(printer);
          }
          if (parsers == null) {
              throw new IllegalArgumentException("No parsers supplied");
          }
          int length = parsers.length;
          if (length == 1) {
              if (parsers[0] == null) {
                  throw new IllegalArgumentException("No parser supplied");
              }
              return append0(DateTimePrinterInternalPrinter.of(printer), DateTimeParserInternalParser.of(parsers[0]));
          }
  
          InternalParser[] copyOfParsers = new InternalParser[length];
          int i;
          for (i = 0; i < length - 1; i++) {
              if ((copyOfParsers[i] = DateTimeParserInternalParser.of(parsers[i])) == null) {
                  throw new IllegalArgumentException("Incomplete parser array");
              }
          }
          copyOfParsers[i] = DateTimeParserInternalParser.of(parsers[i]);
  
          return append0(DateTimePrinterInternalPrinter.of(printer), new MatchingParser(copyOfParsers));
      }
docs: Appends a printer and a set of matching parsers. When parsing, the first
  parser in the list is selected for parsing. If it fails, the next is
  chosen, and so on. If none of these parsers succeeds, then the failed
  position of the parser that made the greatest progress is returned.
  <p>
  Only the printer is optional. In addition, it is illegal for any but the
  last of the parser array elements to be null. If the last element is
  null, this represents the empty parser. The presence of an empty parser
  indicates that the entire array of parse formats is optional.
  <p>
  The printer and parser interfaces are the low-level part of the formatting API.
  Normally, instances are extracted from another formatter.
  Note however that any formatter specific information, such as the locale,
  time-zone, chronology, offset parsing or pivot/default year, will not be
  extracted by this method.
  
  @param printer  the printer to add
  @param parsers  the parsers to add
  @return this DateTimeFormatterBuilder, for chaining
  @throws IllegalArgumentException if any printer or parser is of an invalid type
  @throws IllegalArgumentException if any parser element but the last is null