示例#1
0
        private static Expression SimplifyFunction(Function node)
        {
            bool @const = true;

            for (int i = 0; i < node.Arguments.Count; i++)
            {
                node.Arguments[i] = Simplify(node.Arguments[i]);
                if (node.Arguments[i].Type != ExpressionType.Float)
                {
                    @const = false;
                }
            }
            if (!@const)
            {
                return(node);
            }
            double         value;
            FunctionEntry  entry    = node.Entry;
            List <Operand> operands = new List <Operand>();

            for (int i = 0; i < node.Arguments.Count; i++)
            {
                operands.Add(new Operand(((Float)node.Arguments[i]).Value));
            }
            value = entry.Exec(operands).value;
            return(new Float {
                Value = value
            });
        }
        public void Exec(Stack <Operand> operands)
        {
            //if you push 1, 2, 3, 4, 5 then ToList will give you 5, 4, 3, 2, 1
            Stack <Operand> arguments = new Stack <Operand>();

            for (int i = 0; i < func.ArgNumber; i++)
            {
                arguments.Push(operands.Pop());
            }
            List <Operand> list = arguments.ToList <Operand>();

            operands.Push(func.Exec(list));
        }