예제 #1
0
        //计算表达式的值
        public static double GetExprValue(ExprNode root)
        {
            if (root == null)
            {
                return(0);
            }
            switch (root.OpCode)
            {
            case Common.Token_Type.PLUS:
                return(GetExprValue(root.Left) + GetExprValue(root.Right));

            case Common.Token_Type.MINUS:
                return(GetExprValue(root.Left) - GetExprValue(root.Right));

            case Common.Token_Type.MUL:
                return(GetExprValue(root.Left) * GetExprValue(root.Right));

            case Common.Token_Type.DIV:
                return(GetExprValue(root.Left) / GetExprValue(root.Right));

            case Common.Token_Type.POWER:
                return(Math.Pow(GetExprValue(root.Left), GetExprValue(root.Right)));

            case Common.Token_Type.FUNC:
                //return (root.MathFuncPtr)(GetExprValue(root.Child));
                return(root.MathFuncPtr(GetExprValue(root.Child)));

            case Common.Token_Type.CONST_ID:
                return(root.CaseConst);

            case Common.Token_Type.T:
                //Console.WriteLine(root.CaseParmPtr());
                return(root.CaseParmPtr());

            default:
                return(0.0);
            }
            ;
        }
예제 #2
0
        //计算表达式的值
        public static double GetExprValue(ExprNode root)
        {
            if (root == null)
            {
                return(0);
            }
            switch (root.OpCode)
            {
            case Common.TokenType.Plus:
                return(GetExprValue(root.Left) + GetExprValue(root.Right));

            case Common.TokenType.Minus:
                return(GetExprValue(root.Left) - GetExprValue(root.Right));

            case Common.TokenType.Mul:
                return(GetExprValue(root.Left) * GetExprValue(root.Right));

            case Common.TokenType.Div:
                return(GetExprValue(root.Left) / GetExprValue(root.Right));

            case Common.TokenType.Power:
                return(Math.Pow(GetExprValue(root.Left), GetExprValue(root.Right)));

            case Common.TokenType.Func:
                //return (root.MathFuncPtr)(GetExprValue(root.Child));
                return(root.MathFuncPtr(GetExprValue(root.Child)));

            case Common.TokenType.ConstId:
                return(root.CaseConst);

            case Common.TokenType.T:
                //Console.WriteLine(root.CaseParmPtr());
                return(root.CaseParmPtr());

            default:
                return(0.0);
            }
        }