code: public final Parser<Optional<T>> asOptional() {
      return map(Optional::of).optional(Optional.empty());
    }
docs: {@code p.asOptional()} is equivalent to {@code p?} in EBNF. {@code Optional.empty()}
  is the result when {@code this} fails with no partial match. Note that {@link Optional}
  prohibits nulls so make sure {@code this} does not result in {@code null}.
  
  @since 3.0