Exemplo n.º 1
0
            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));
            }
Exemplo n.º 2
0
            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));
            }
Exemplo n.º 3
0
 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));
     }
 }
Exemplo n.º 4
0
 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));
     }
 }
Exemplo n.º 5
0
            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));
            }
Exemplo n.º 6
0
            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));
            }
Exemplo n.º 7
0
            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));
            }