private static void SkipWhiteSpace(this InputReader input) { while (input.HasNext() && char.IsWhiteSpace(input.PeekNext())) { input.Next(); } }
public IExpression?Parse(InputReader input) { if (input.NextIs(_beginSymbol)) { input.Next(); var expression = Start.Parse(input); if (!input.NextIs(_endSymbol)) { throw new BadInputFormat(input.Text, input.Index); } input.Next(); return(_expressionFactory.Invoke(expression)); } return(_next.Parse(input)); }
internal static string TakeIf(this InputReader input, params char[] anyOf) { input.SkipWhiteSpace(); if (input.NextIs(anyOf)) { return(input.Next().ToString()); } return(""); }
internal static string TakeWhile(this InputReader input, Func <char, bool> predicate) { input.SkipWhiteSpace(); string token = ""; while (input.HasNext() && predicate(input.PeekNext())) { token += input.Next(); } return(token); }
public IExpression?Parse(InputReader input) { var left = ParseNextExpression(input); while (input.NextIs(_supportedOperators.Keys.ToArray())) { var symbol = input.Next(); var right = ParseNextExpression(input); left = _supportedOperators[symbol]?.Invoke(left, right); } return(left); }