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> NullDenominator(int rbp, NudFunc <TInput, TValue, TOutput> getNud) { Assert.ArgumentNotNull(getNud, nameof(getNud)); _getParselets.Add((m, tid, n) => new Parselet <TInput, TValue, TOutput>( tid, m, getNud, null, rbp, rbp, n )); return(this); }
/// <summary> /// Synonym for NullDenominator. Create a parse rule which does not bind to a value on the left /// side. This rule has 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="rbp"></param> /// <param name="getNud"></param> /// <returns></returns> public static IPrattParseletBuilder <TInput, TValue, TOutput> Bind <TInput, TValue, TOutput>(this IPrattParseletBuilder <TInput, TValue, TOutput> builder, int rbp, NudFunc <TInput, TValue, TOutput> getNud) => builder.NullDenominator(rbp, getNud);