Beispiel #1
0
 private static void SkipWhiteSpace(this InputReader input)
 {
     while (input.HasNext() && char.IsWhiteSpace(input.PeekNext()))
     {
         input.Next();
     }
 }
Beispiel #2
0
        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));
        }
Beispiel #3
0
        internal static string TakeIf(this InputReader input, params char[] anyOf)
        {
            input.SkipWhiteSpace();

            if (input.NextIs(anyOf))
            {
                return(input.Next().ToString());
            }

            return("");
        }
Beispiel #4
0
        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);
        }