public void HandlePrint(StackStateMachine machine, Instruction instruction)
 {
     if (instruction.Args.Length > 0)
     {
         if (instruction.Args[0].ArgType == ArgType.ENUM)
         {
             if (instruction.Args[0].Value == "换行")
             {
                 print(Environment.NewLine);
             }
             else
             {
                 print(instruction.Args[0].Value);
             }
         }
         else
         {
             print(instruction.Args[0].Value);
         }
     }
     else
     {
         if (runtimeStack.Count < 1)
         {
             throw new ArgumentException(instruction.InstructionCode + " 需要 " + StackName + " 中有至少一个文本");
         }
         print(peek());
     }
 }
 public void HandleGen(StackStateMachine machine, Instruction instruction)
 {
     if (instruction.Args.Length < 1)
     {
         throw new ArgumentException(instruction.InstructionCode + " 命令需要参数");
     }
     generateHelper.InvokeGenerate(machine, instruction);
 }
 public void HandlePop(StackStateMachine machine, Instruction instruction)
 {
     if (runtimeStack.Count < 1)
     {
         throw new InvalidOperationException(StackName + " 中是空的,删除失败");
     }
     pop();
 }
 public void HandleGet(StackStateMachine machine, Instruction instruction)
 {
     if (instruction.Args.Length < 1)
     {
         throw new ArgumentException(instruction.InstructionCode + " 命令需要参数");
     }
     push(get(instruction.Args[0].Value));
 }
 public void HandleClone(StackStateMachine machine, Instruction instruction)
 {
     if (runtimeStack.Count < 1)
     {
         throw new InvalidOperationException(instruction.InstructionCode + " 命令要求 " + StackName + " 中至少有一条文本");
     }
     push(peek());
 }
        public void HandleRandom(StackStateMachine machine, Instruction instruction)
        {
            if (runtimeStack.Count < 1)
            {
                throw new InvalidOperationException(StackName + " 中是空的,不能随机选择");
            }
            int chosen = InstructionUtils.Rnd().Next() % runtimeStack.Count();

            push(runtimeStack[chosen]);
        }
 public void InvokeGenerate(StackStateMachine machine, Instruction instruction)
 {
     if (InstructionCollection.ContainsKey(instruction.Args[0].Value))
     {
         CommandHost host = InstructionCollection[instruction.Args[0].Value];
         host.Invoke(machine, instruction);
         return;
     }
     throw new ArgumentException("不能生成 " + instruction.Args[0].Value);
 }
        public void HandleJoin(StackStateMachine machine, Instruction instruction)
        {
            StringBuilder sb = new StringBuilder();

            foreach (string s in runtimeStack)
            {
                sb.Append(s);
            }
            runtimeStack.Clear();
            push(sb.ToString());
        }
 public void HandleDecode(StackStateMachine machine, Instruction instruction)
 {
     if (instruction.Args.Length < 1)
     {
         throw new ArgumentException(instruction.InstructionCode + " 命令需要参数");
     }
     if (runtimeStack.Count < 1)
     {
         throw new InvalidOperationException(instruction.InstructionCode + " 命令需要 " + StackName + " 中至少有一条文本");
     }
     decode(instruction.Args);
 }
        public void HandleSwap(StackStateMachine machine, Instruction instruction)
        {
            if (runtimeStack.Count < 2)
            {
                throw new ArgumentException(instruction.InstructionCode + " 需要 " + StackName + " 中有至少两个文本");
            }
            string bottom = pop();
            string top    = pop();

            push(bottom);
            push(top);
        }
 public void HandlePrintAs(StackStateMachine machine, Instruction instruction)
 {
     if (instruction.Args.Length < 1)
     {
         throw new ArgumentException(instruction.InstructionCode + " 命令需要1个参数");
     }
     if (runtimeStack.Count < 1)
     {
         throw new ArgumentException(instruction.InstructionCode + " 需要 " + StackName + " 中有至少一个文本");
     }
     print(instruction.Args[0].Value + "=" + peek() + "\r\n");
 }
        public void HandlePush(StackStateMachine machine, Instruction instruction)
        {
            if (instruction.Args.Length < 1)
            {
                throw new ArgumentException(instruction.InstructionCode + " 命令需要参数");
            }

            if (instruction.Args[0].ArgType == ArgType.ENUM)
            {
                if (runtimeRegister.ContainsKey(instruction.Args[0].Value))
                {
                    HandleGet(machine, instruction);
                }
            }
            else
            {
                push(instruction.Args[0].Value);
            }
        }
        public void HandleSet(StackStateMachine machine, Instruction instruction)
        {
            if (instruction.Args.Length < 1)
            {
                throw new ArgumentException(instruction.InstructionCode + " 命令需要1-2个参数");
            }

            if (instruction.Args.Length >= 2)
            {
                set(instruction.Args[0].Value, instruction.Args[1].Value);
            }
            else
            {
                if (runtimeStack.Count < 1)
                {
                    throw new InvalidOperationException(instruction.InstructionCode + " 命令在只使用一个参数时需要 " + StackName + " 中至少有一条文本");
                }
                set(instruction.Args[0].Value, pop());
            }
        }
 void GenerateAwesomeWord(StackStateMachine machine, Instruction instruction)
 {
 }
 void GenerateDirtyWord(StackStateMachine machine, Instruction instruction)
 {
 }
 void GeneratePaymentPassword(StackStateMachine machine, Instruction instruction)
 {
 }
 void GenerateBankCard(StackStateMachine machine, Instruction instruction)
 {
 }
 void GenerateEmail(StackStateMachine machine, Instruction instruction)
 {
 }
 void GenerateMobilePhone(StackStateMachine machine, Instruction instruction)
 {
 }
 void GenerateTelephone(StackStateMachine machine, Instruction instruction)
 {
 }
 void GenerateIDCardNumber(StackStateMachine machine, Instruction instruction)
 {
 }
 void GenerateName(StackStateMachine machine, Instruction instruction)
 {
 }
 void GenerateNaturePassword(StackStateMachine machine, Instruction instruction)
 {
 }
 void GenerateTimeStamp(StackStateMachine machine, Instruction instruction)
 {
     machine.runtimeStack.Add(InstructionUtils.GetTimestamp().ToString());
 }
 void GeneratePassword(StackStateMachine machine, Instruction instruction)
 {
     machine.runtimeStack.Add(InstructionUtils.RandomPassword());
 }
 void GenerateQQ(StackStateMachine machine, Instruction instruction)
 {
     machine.runtimeStack.Add(InstructionUtils.RandomQQNumber());
 }
 public StackStateMachineEventArgs(StackStateMachine machine)
 {
     this.Machine = machine;
 }
 public void HandleClear(StackStateMachine machine, Instruction instruction)
 {
     runtimeStack.Clear();
 }