コード例 #1
0
        /// <summary>
        /// Overloaded Parse function to parse a Function
        /// </summary>
        /// <param name="walker">Lexer input</param>
        /// <returns></returns>
        public IParseNode Parse(TokenWalker walker)
        {
            var lexem = walker.Pop();

            if (lexem.Token is IdentifierToken)
            {
                FunctionNode function = new FunctionNode(lexem);

                // Pop opening parenthesis
                function.OpenParenthesis = walker.Consume <OpenParenthesisToken>();

                function.Parameters.Add(_expressionParser.Parse(walker));
                while (walker.NextIs <CommaToken>())
                {
                    walker.Consume <CommaToken>();
                    function.Parameters.Add(_expressionParser.Parse(walker));
                }

                function.ClosedParenthesis = walker.Consume <ClosedParenthesisToken>();
                return(function);
            }

            throw new ArgumentNullException();
        }
コード例 #2
0
        /// <summary>
        /// Overloaded Parse function to parse a Factor
        /// </summary>
        /// <param name="walker">Lexer input</param>
        /// <returns></returns>
        public IParseNode Parse(TokenWalker walker)
        {
            if (walker.NextIs <NumberToken>())
            {
                return(CreateNumberNode(walker));
            }

            if (walker.NextIs <IdentifierToken>())
            {
                return(walker.NextIs <OpenParenthesisToken>(1)
                    ? _functionParser.Parse(walker)
                    : _variableParser.Parse(walker));
            }

            walker.ExpectOpeningParenthesis();
            var result = _expressionParser.Parse(walker);

            walker.ExpectClosingParenthesis();

            return(result);
        }