public Instruction(ProgramOperator op) { _op = op; }
public void run() { if (_loaded) { _vars = new Dictionary<int, var>(); _cursor = -1; _container = -1; while (hasNext()) { _op = (ProgramOperator)getNext(); switch (_op) { case ProgramOperator.SET: _container = getNext(); if (!_vars.ContainsKey(_container)) { _vars.Add(_container, 0); } break; case ProgramOperator.ADD: { _vars[_container] = _vars[_container] + extractVar(); break; } case ProgramOperator.REM: _vars[_container] = _vars[_container] - extractVar(); break; case ProgramOperator.MUL: _vars[_container] = _vars[_container] * extractVar(); break; case ProgramOperator.DIV: _vars[_container] = _vars[_container] / extractVar(); break; case ProgramOperator.MOV: _vars[_container] = extractVar(); break; case ProgramOperator.PRT: _selected = getNext(); if (_vars.ContainsKey(_selected)) { Console.WriteLine(_vars[_selected]); } else { throw new RunnerError(ErrorCode.VAR_NOT_SELECTED); } break; default: throw new RunnerError(ErrorCode.BAD_OPERATOR); } } } else { throw new RunnerError(ErrorCode.BINARY_NOT_LOAD); } }