docs: @Override
      public ParseResult parse(final Source source) {
          return Util.execute(new ExceptionAction<ParseResult>() {
              @Override
              public ParseResult doAction() throws Throwable {
                  logger.fine("Parsing " + source.getSrcInfo());
                  final BufferedReader reader = source.createReader();
                  try {
                      final ParserImpl impl = factory.create(source.getSrcInfo(),
                              reader);
                      final Doc doc = impl.doc();
                      return new ParseResult(doc, impl.errors());
                  } finally {
                      reader.close();
                  }
              }
          });
      }