public IOption <IPrattToken <TOutput> > LeftDenominator(IPrattParseContext <TInput, TOutput> context, IPrattToken left) => FailureOption <IPrattToken <TOutput> > .Instance;
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)); }
public IOption <IPrattToken <TOutput> > LeftDenominator(IPrattParseContext <TInput, TOutput> context, IPrattToken left) => _parselet.Led(context, left, this);