Example #1
0
 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;
 }
Example #2
0
 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);
 }
Example #3
0
 /// <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);