Ejemplo n.º 1
0
        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());
        }