internal override InternalResult <string> Parse(IParseState <TToken> state) { var consumedInput = false; var builder = new PooledStringBuilder(_count); for (var _ = 0; _ < _count; _++) { var result = _parser.Parse(state); consumedInput = consumedInput || result.ConsumedInput; if (!result.Success) { state.Error = state.Error.WithExpected(Expected); return(InternalResult.Failure <string>(consumedInput)); } builder.Append(result.Value); } return(InternalResult.Success(builder.GetStringAndClear(), consumedInput)); }
internal sealed override InternalResult <string> Parse(IParseState <char> state) { var consumedInput = false; var builder = new PooledStringBuilder(_value.Length); foreach (var c in _value) { var result = state.Peek(); if (!result.HasValue) { state.Error = new ParseError <char>( result, true, Expected, state.SourcePos, null ); return(InternalResult.Failure <string>(consumedInput)); } var token = result.GetValueOrDefault(); if (char.ToLowerInvariant(token) != c) { state.Error = new ParseError <char>( result, false, Expected, state.SourcePos, null ); return(InternalResult.Failure <string>(consumedInput)); } consumedInput = true; builder.Append(token); state.Advance(); } return(InternalResult.Success <string>(builder.GetStringAndClear(), consumedInput)); }