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