示例#1
0
        /// EXPONENT: FACTORIAL_FACTOR [ '^' EXPONENT ]*      Exponents
        private bool TryParseExponent(out ASTNode node)
        {
            if (TryParseFactorialFactor(out node))
            {
                if (IsNext(Token.TokenType.Exponent))
                {
                    var op = Accept();
                    if (TryParseExponent(out var rhs))
                    {
                        node = new ExponentBinaryOperatorASTNode(op, node, rhs);
                    }
                }
            }

            return(node != null);
        }
示例#2
0
        /// EXPONENT: FACTORIAL_FACTOR [ '^' EXPONENT ]*      Exponents
        private ASTNode ParseExponent( )
        {
            var node = ParseFactorialFactor();

            if (IsNext(Token.TokenType.Exponent))
            {
                //magic goes here
                var op = Accept();  //accept the exponent operator
                //example 2^3^2
                // left_node(2)
                // right_node( exponent_node( left_node(3), right_node(2) ) );
                //    ^
                //  2   ^
                //    3   2
                node = new ExponentBinaryOperatorASTNode(op, node, ParseExponent( ));  //recursive call for Exponent
            }
            return(node);
        }
示例#3
0
 protected double Evaluate(ExponentBinaryOperatorASTNode node)
 => Math.Pow(Evaluate(node.Left as dynamic), Evaluate(node.Right as dynamic));