Exemple #1
0
 public IOption <IPrattToken <TOutput> > LeftDenominator(IPrattParseContext <TInput, TOutput> context, IPrattToken left) => FailureOption <IPrattToken <TOutput> > .Instance;
Exemple #2
0
    private PartialResult <IPrattToken <TOutput> > GetRight(IParseState <TInput> state, int rbp, IPrattToken <TOutput> leftToken, ParseControl parseControl)
    {
        var cp = state.Input.Checkpoint();

        foreach (var parselet in _ledableParselets.Where(p => rbp < p.Lbp))
        {
            var(success, token, consumed) = parselet.TryGetNext(state);
            if (!success)
            {
                continue;
            }

            var rightContext = new ParseContext <TInput, TOutput>(state, this, parselet.Rbp, true, parselet.Name, parseControl);

            // Transform the IToken into IToken<TOutput> using the LeftDenominator rule and
            // the current left value
            var rightResult = token.LeftDenominator(rightContext, leftToken);
            if (!rightResult.Success)
            {
                cp.Rewind();
                if (parseControl.IsComplete)
                {
                    return(new PartialResult <IPrattToken <TOutput> >("The parse is complete", state.Input.CurrentLocation));
                }
                continue;
            }

            return(new PartialResult <IPrattToken <TOutput> >(rightResult.Value, consumed + rightContext.Consumed, state.Input.CurrentLocation));
        }

        return(new PartialResult <IPrattToken <TOutput> >(string.Empty, state.Input.CurrentLocation));
    }
Exemple #3
0
 public IOption <IPrattToken <TOutput> > LeftDenominator(IPrattParseContext <TInput, TOutput> context, IPrattToken left)
 => _parselet.Led(context, left, this);