public void ManyTillTest() { Combinator.ManyTill( Parser.Fail <Char, Char>("Failure"), Parser.Fail <Char, Unit>("Failure")) .Run("inputString".AsStream()) .Case( failure: (restStream, _) => { /* OK */ }, success: (restStream, _) => Assert.Fail()); Combinator.ManyTill( Parser.Fail <Char, Char>("Failure"), Parser.Return <Char, Unit>(Unit.Instance)) .Run("inputString".AsStream()) .Case( failure: (restStream, _) => Assert.Fail(), success: (restStream, value) => { Assert.False(value.Any()); }); /* * line comment parser example: */ var lineCommentBegin = Chars.Sequence("//"); var lineCommentEnd = Chars.EndOfInput().Or(Chars.Char('\n').Ignore()); var lineComment = lineCommentBegin .Bindr(Combinator.ManyTill(Chars.Any(), lineCommentEnd)) .Ignore(); var foobar = Chars.Sequence("foobar"); lineComment.Bindr(foobar) .Run("//comment comment comment\nfoobar".AsStream()) .Case( failure: (restStream, _) => Assert.Fail(), success: (restStream, value) => { Assert.True(Enumerable.SequenceEqual(value, "foobar")); }); }