private object[] ParseWithRepeats(string source, ParsingContext ctx) { var result = new List <object>(); int activeIndex = ctx.Index; object failureResult = null; while (result.Count < Max && ctx.Success) { var itemResult = Repeated.Parse(source, ctx); if (ctx.Success) { result.Add(itemResult); activeIndex = ctx.Index; if (Separator != null) { Separator.Parse(source, ctx); if (ctx.Success) { activeIndex = ctx.Index; } } } else { failureResult = itemResult; } } ctx.Success = result.Count >= Min; if (ctx.Success) { ctx.Index = activeIndex; } else if (failureResult != null) { result.Add(failureResult); } return(result.ToArray()); }