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)); }