Beispiel #1
0
 /// <inheritdoc />
 public T Walk <T>(Model model)
 {
     // NOTE have to lock as this method is called from different threads
     lock (_lockObj)
     {
         _opStack = new OperationStack(model);
         var operation = _tree.Children[0] as CommonTree;
         VisitOperation(operation);
         return((T)_opStack.Pop());
     }
 }
Beispiel #2
0
        private void Eval()
        {
            var op = OperationStack.Pop();

            if (Operations.ContainsKey(op))
            {
                object b = OperandStack.Pop();
                object a = OperandStack.Pop();
                OperandStack.Push(Operations[op](a, b));
            }

            if (FuncsSignatures.ContainsKey(op))
            {
                var list = new List <object>();
                for (int i = 0; i < FuncsSignatures[op]; i++)
                {
                    list.Add(OperandStack.Pop());
                }
                list.Reverse();
                OperandStack.Push(Funcs[op](list));
            }
        }