//计算表达式的值 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); } ; }
//计算表达式的值 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); } }