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;
 }
Beispiel #2
0
 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));
     }
 }
Beispiel #3
0
 public int Eval()
 {
     var runtimeEnvironment = new RuntimeEnvironment();
     return _expression.Eval(runtimeEnvironment, _functionEnvironment);
 }
Beispiel #4
0
 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);
 }
Beispiel #5
0
        public int Eval()
        {
            var runtimeEnvironment = new RuntimeEnvironment();

            return(_expression.Eval(runtimeEnvironment, _functionEnvironment));
        }
Beispiel #6
0
        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));
            }
        }