public override void Execute(QuackVM vm, Workflow workflow)
            {
                int operand1 = vm.GetRegistry(_register);

                writer.WriteLine(operand1);
                workflow.GoToNext();
            }
            public override void Execute(QuackVM vm, Workflow workflow)
            {
                int operand1 = vm.Get();

                vm.PutRegistry(_register, operand1);
                workflow.GoToNext();
            }
 public Workflow(QuackVM vm)
 {
     _vm              = vm;
     _commands        = new ICommand[100001];
     _labelPositions  = new Dictionary <string, int>();
     _currentPosition = 0;
     _lastPosition    = 0;
 }
            public override void Execute(QuackVM vm, Workflow workflow)
            {
                int  operand1 = vm.GetRegistry(_register);
                char c        = (char)(operand1 % 256);

                writer.Write(c);
                workflow.GoToNext();
            }
            public override void Execute(QuackVM vm, Workflow workflow)
            {
                long operand1 = vm.Get();
                long operand2 = vm.Get();

                vm.Put((int)((operand1 * operand2) % 65536));
                workflow.GoToNext();
            }
            public override void Execute(QuackVM vm, Workflow workflow)
            {
                int operand1 = vm.Get();
                int operand2 = vm.Get();

                vm.Put((operand1 - operand2 + 65536) % 65536);
                workflow.GoToNext();
            }
            public override void Execute(QuackVM vm, Workflow workflow)
            {
                int value = vm.GetRegistry(_register);

                if (value == 0)
                {
                    workflow.GoToLabel(_labelName);
                }
                else
                {
                    workflow.GoToNext();
                }
            }
            public override void Execute(QuackVM vm, Workflow workflow)
            {
                int operand1 = vm.Get();
                int operand2 = vm.Get();

                if (operand2 == 0)
                {
                    vm.Put(0);
                }
                else
                {
                    vm.Put(operand1 % operand2);
                }
                workflow.GoToNext();
            }
        static void Main(string[] args)
        {
            using (reader = File.OpenText("input.txt"))
                using (writer = new StreamWriter(File.Create("output.txt")))
                {
                    QuackVM  vm = new QuackVM();
                    Workflow wf = new Workflow(vm);

                    while (!reader.EndOfStream)
                    {
                        string   str = reader.ReadLine();
                        ICommand cmd = null;
                        switch (str[0])
                        {
                        case '+':
                            cmd = new PlusCommand();
                            break;

                        case '-':
                            cmd = new MinusCommand();
                            break;

                        case '*':
                            cmd = new MultiplyCommand();
                            break;

                        case '/':
                            cmd = new DivideCommand();
                            break;

                        case '%':
                            cmd = new ModuloCommand();
                            break;

                        case '>':
                            cmd = new SetRegisterCommand(str[1]);
                            break;

                        case '<':
                            cmd = new GetRegisterCommand(str[1]);
                            break;

                        case 'P':
                            if (str.Length > 1)
                            {
                                cmd = new PrintRegisterCommand(str[1]);
                            }
                            else
                            {
                                cmd = new PrintCommand();
                            }
                            break;

                        case 'C':
                            if (str.Length > 1)
                            {
                                cmd = new PrintRegisterCharCommand(str[1]);
                            }
                            else
                            {
                                cmd = new PrintCharCommand();
                            }
                            break;

                        case ':':
                            cmd = new LabelCommand(str.Substring(1));
                            break;

                        case 'J':
                            cmd = new GoToLabelCommand(str.Substring(1));
                            break;

                        case 'Z':
                            cmd = new GoToLabelZCommand(str[1], str.Substring(2));
                            break;

                        case 'E':
                            cmd = new GoToLabelECommand(str[1], str[2], str.Substring(3));
                            break;

                        case 'G':
                            cmd = new GoToLabelGCommand(str[1], str[2], str.Substring(3));
                            break;

                        case 'Q':
                            cmd = new QuitCommand();
                            break;

                        default:
                            cmd = new NumberCommand(int.Parse(str));
                            break;
                        }
                        wf.AddCommand(cmd);
                    }

                    while (!wf.IsCompleted())
                    {
                        wf.ExecuteCurrentCommand();
                    }
                }
        }
示例#10
0
 public override void Execute(QuackVM vm, Workflow workflow)
 {
     vm.Put(_number);
     workflow.GoToNext();
 }
示例#11
0
 public override void Execute(QuackVM vm, Workflow workflow)
 {
     workflow.Quit();
 }
示例#12
0
 public override void Execute(QuackVM vm, Workflow workflow)
 {
     workflow.GoToLabel(_labelName);
 }
示例#13
0
 public override void Execute(QuackVM vm, Workflow workflow)
 {
     workflow.GoToNext();
 }
示例#14
0
 public abstract void Execute(QuackVM vm, Workflow workflow);