internal sealed override InternalResult <TToken> Parse(IParseState <TToken> state) { var x = state.Peek(); if (!x.HasValue) { state.Error = new ParseError <TToken>( x, true, Expected, state.SourcePos, null ); return(InternalResult.Failure <TToken>(false)); } var val = x.GetValueOrDefault(); if (!EqualityComparer <TToken> .Default.Equals(val, _token)) { state.Error = new ParseError <TToken>( x, false, Expected, state.SourcePos, null ); return(InternalResult.Failure <TToken>(false)); } state.Advance(); return(InternalResult.Success <TToken>(val, true)); }
internal sealed override Result <TToken, TToken> Parse(IParseState <TToken> state) { var x = state.Peek(); if (!x.HasValue) { return(Result.Failure <TToken, TToken>( new ParseError <TToken>( x, true, Expected, state.SourcePos, null ), false )); } var val = x.GetValueOrDefault(); if (!_predicate(val)) { return(Result.Failure <TToken, TToken>( new ParseError <TToken>( x, false, Expected, state.SourcePos, null ), false )); } state.Advance(); return(Result.Success <TToken, TToken>(val, true)); }
private static Result <TToken, T> DoParse <TToken, T>(Parser <TToken, T> parser, IParseState <TToken> state) { using (state) // ensure we return the state's buffer to the buffer pool { state.Advance(); // pull the first element from the input return(parser.Parse(state)); } }
private static Result <TToken, T> DoParse <TToken, T>(Parser <TToken, T> parser, IParseState <TToken> state) { using (state) // ensure we return the state's buffer to the buffer pool { state.Advance(); // pull the first element from the input var result = parser.Parse(state); if (!result.Success) { return(new Result <TToken, T>(result.ConsumedInput, state.Error)); } return(new Result <TToken, T>(result.ConsumedInput, result.Value)); } }
internal sealed override Result <TToken, TEnumerable> Parse(IParseState <TToken> state) { var consumedInput = false; foreach (var x in _valueList) { var result = state.Peek(); if (!result.HasValue) { return(Result.Failure <TToken, TEnumerable>( new ParseError <TToken>( result, true, Expected, state.SourcePos, null ), consumedInput )); } TToken token = result.GetValueOrDefault(); if (!token.Equals(x)) { return(Result.Failure <TToken, TEnumerable>( new ParseError <TToken>( result, false, Expected, state.SourcePos, null ), consumedInput )); } consumedInput = true; state.Advance(); } return(Result.Success <TToken, TEnumerable>(_value, 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)); }
internal sealed override InternalResult <TEnumerable> Parse(IParseState <TToken> state) { var consumedInput = false; foreach (var x in _valueTokens) { var result = state.Peek(); if (!result.HasValue) { state.Error = new ParseError <TToken>( result, true, Expected, state.SourcePos, null ); return(InternalResult.Failure <TEnumerable>(consumedInput)); } TToken token = result.GetValueOrDefault(); if (!EqualityComparer <TToken> .Default.Equals(token, x)) { state.Error = new ParseError <TToken>( result, false, Expected, state.SourcePos, null ); return(InternalResult.Failure <TEnumerable>(consumedInput)); } consumedInput = true; state.Advance(); } return(InternalResult.Success <TEnumerable>(_value, consumedInput)); }