public int Eval(RuntimeEnvironment runtimeEnvironment, FunctionEnvironment functionEnvironment, int argument) { runtimeEnvironment.AllocateLocal(_argument.Item1); runtimeEnvironment.GetVariable(_argument.Item1).Value = argument; var v = _body.Eval(runtimeEnvironment, functionEnvironment); runtimeEnvironment.Pop(); return v; }
public override int Eval(RuntimeEnvironment runtimeEnvironment, FunctionEnvironment functionEnvironment) { var value = _expression.Eval(runtimeEnvironment, functionEnvironment); switch (_op) { case Operator.Not: return value == 0 ? 1 : 0; case Operator.Neg: return -value; default: throw new InvalidOperationException(string.Format("Unknown unary operator: {0}", _op)); } }
public int Eval() { var runtimeEnvironment = new RuntimeEnvironment(); return _expression.Eval(runtimeEnvironment, _functionEnvironment); }
public override int Eval(RuntimeEnvironment runtimeEnvironment, FunctionEnvironment functionEnvironment) { var argumentValue = _arg.Eval(runtimeEnvironment, functionEnvironment); var function = functionEnvironment.GetFunction(_name); return function.Eval(runtimeEnvironment, functionEnvironment, argumentValue); }
public int Eval() { var runtimeEnvironment = new RuntimeEnvironment(); return(_expression.Eval(runtimeEnvironment, _functionEnvironment)); }
public override int Eval(RuntimeEnvironment runtimeEnvironment, FunctionEnvironment functionEnvironment) { var v1 = _e1.Eval(runtimeEnvironment, functionEnvironment); var v2 = _e2.Eval(runtimeEnvironment, functionEnvironment); switch (_op) { case Operator.Add: return v1 + v2; case Operator.Div: return v1 / v2; case Operator.Mul: return v1 * v2; case Operator.Sub: return v1 - v2; case Operator.Eq: return v1 == v2 ? 1 : 0; case Operator.Ne: return v1 != v2 ? 1 : 0; case Operator.Lt: return v1 < v2 ? 1 : 0; case Operator.Le: return v1 <= v2 ? 1 : 0; case Operator.Gt: return v1 > v2 ? 1 : 0; case Operator.Ge: return v1 >= v2 ? 1 : 0; case Operator.And: return v1 == 0 ? 0 : v2; case Operator.Or: return v1 == 0 ? v2 : 1; default: throw new InvalidOperationException(string.Format("Unknown binary operator: {0}", _op)); } }