public static Parser <TToken, IDelayed <ISeq <T> > > Many0 <TToken, T>( Parser <TToken, T> parser) { return(stream => parser(stream).Case( failure: (restStream, errorMessage) => Reply.Success <TToken, IDelayed <ISeq <T> > >(stream, Seq.Empty <T>()), success: (restStream, head) => InternalCombinator.Many0(parser).Select(tail => Seq.Cons(head, tail))(restStream))); }
public static Parser <TToken, IDelayed <ISeq <T> > > EndBy0 <TToken, T>( Parser <TToken, T> parser, Parser <TToken, Unit> sep) { return(InternalCombinator.Many0(parser.SelectMany(value => sep.Select(_ => value)))); }
public static Parser <TToken, IDelayed <ISeq <T> > > SepBy1 <TToken, T>( Parser <TToken, T> parser, Parser <TToken, Unit> sep) { return(parser.SelectMany(head => InternalCombinator.Many0(sep.SelectMany(_ => parser)).Select(tail => Seq.Cons(head, tail)))); }
public static Parser <TToken, IDelayed <ISeq <T> > > Many1 <TToken, T>( Parser <TToken, T> parser) { return(parser.SelectMany(head => InternalCombinator.Many0(parser).Select(tail => Seq.Cons(head, tail)))); }