Esempio n. 1
0
            public override Parser <TInput> VisitRule <TOutput>(RuleParser <TInput, TOutput> parser)
            {
                if (state.LastResult < 0)
                {
                    // last parser failed, so fail the whole rule
                    state.InputLength = -state.InputLength + state.LastResult;
                    output.SetCount(state.OriginalOutputCount);
                    return(null);
                }
                else
                {
                    state.InputLength += state.LastResult;

                    if (state.State >= parser.Parsers.Count)
                    {
                        var value = parser.ListProducer(output, state.OutputStart);
                        output.SetCount(state.OutputStart);
                        output.Add(value);
                        return(null);
                    }
                    else
                    {
                        var next = parser.Parsers[state.State];
                        state.State++;
                        state.NextOutputStart = output.Count;
                        return(next);
                    }
                }
            }