public Parselet(int tokenTypeId, IParser <TInput, TValue> match, NudFunc <TInput, TValue, TOutput>?nud, LedFunc <TInput, TValue, TOutput>?led, int lbp, int rbp, string name) { Assert.ArgumentNotNull(match, nameof(match)); TokenTypeId = tokenTypeId; _match = match; _nud = nud; _led = led; Lbp = lbp; Rbp = rbp; Name = name ?? _match.Name ?? ((TokenTypeId > 0) ? TokenTypeId.ToString() : match.ToString()) ?? string.Empty; }
public IPrattParseletBuilder <TInput, TValue, TOutput> LeftDenominator(int lbp, int rbp, LedFunc <TInput, TValue, TOutput> getLed) { Assert.ArgumentNotNull(getLed, nameof(getLed)); _getParselets.Add((m, tid, n) => new Parselet <TInput, TValue, TOutput>( tid, m, null, getLed, lbp, rbp, n )); return(this); }
/// <summary> /// Synonym for LeftDenominator. Create a parse rule which binds to a left-hand value with a /// specified binding power, and may recurse into the Pratt engine to produce subsequent /// values. /// </summary> /// <typeparam name="TInput"></typeparam> /// <typeparam name="TValue"></typeparam> /// <typeparam name="TOutput"></typeparam> /// <param name="builder"></param> /// <param name="lbp"></param> /// <param name="getLed"></param> /// <returns></returns> public static IPrattParseletBuilder <TInput, TValue, TOutput> BindLeft <TInput, TValue, TOutput>(this IPrattParseletBuilder <TInput, TValue, TOutput> builder, int lbp, LedFunc <TInput, TValue, TOutput> getLed) => builder.LeftDenominator(lbp, lbp + 1, getLed);