rendered paste bodydef reg(str, pat): cnt = 0 alpha = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz" numbers = "0123456789" alphanum = numbers + alpha for symbol in pat: if cnt == len(str) - 1: return 1 #check for string if symbol == "*": while(1): if not str[cnt] in alpha: break if cnt == len(str) - 1: return 1 cnt += 1 #check for character if symbol == "?": if not str[cnt] in alpha: return 0 cnt += 1 #check for numbers if symbol == "#": if not str[cnt] in numbers: return 0 cnt += 1 #check for string of numbers if symbol == "%": while(1): if not str[cnt] in numbers: break if cnt == len(str) - 1: return 1 cnt += 1 #check for alphanumeric if symbol == "^": if not str[cnt] in alphanum: return 0 cnt += 1 #check for alphanum string if symbol == "&": while(1): if not str[cnt] in alphanum: break if cnt == len(str) - 1: return 1 cnt += 1class inter: def __init__(self): self.mem = [] self.stack = [] self.ip = 0 self.halt = 0 def get_instr(self, op): op = op.split(" ") if op[0][0] == '#': return None return int(op[0]) def get_arg1(self, op): op = op.split(" ") return self.numeric(op[1]) def get_arg2(self, op): op = op.split(" ") return self.numeric(op[2]) def numeric(self, expr): if expr.find('.') == -1: return int(expr) return float(expr) def decode_op(self, op): opc = self.get_instr(op) if not opc: return if opc == 1000: a = self.stack.pop() b = self.stack.pop() self.stack.append(a + b) return elif opc == 1001: a = self.stack.pop() b = self.stack.pop() self.stack.append(b - a) return elif opc == 1002: a = self.stack.pop() b = self.stack.pop() self.stack.append(a * b) return elif opc == 1003: a = self.stack.pop() b = self.stack.pop() self.stack.append(float(b) / a) return elif opc == 1004: a = self.stack.pop() b = self.stack.pop() if a == b: self.stack.append(1) return self.stack.append(0) return elif opc == 1005: a = self.stack.pop() b = self.stack.pop() if b > a: self.stack.append(1) return self.stack.append(0) return elif opc == 1006: a = self.stack.pop() b = self.stack.pop() if a > b: self.stack.append(1) return self.stack.append(0) return elif opc == 1007: a = self.stack.pop() b = self.stack.pop() if b >= a: self.stack.append(1) return self.stack.append(0) return elif opc == 1008: a = self.stack.pop() b = self.stack.pop() if a >= b: self.stack.append(1) return self.stack.append(0) return elif opc == 1009: a = self.stack.pop() a -= 1 self.stack.append(a) return elif opc == 1010: a = self.get_arg1(op) self.stack.append(a) return elif opc == 1011: a = self.get_arg1(op) b = self.get_arg2(op) self.mem[a] = b return elif opc == 1012: a = self.get_arg1(op) self.stack.append(self.mem[a]) return elif opc == 1013: a = self.get_arg1(op) self.mem[a] = self.stack.pop() return elif opc == 1014: a = self.get_arg1(op) self.ip = a - 2 return elif opc == 1015: a = self.stack.pop() if a: self.ip = self.get_arg1(op) - 2 return return elif opc == 1016: a = self.stack.pop() if not a: self.ip = self.get_arg1(op) - 2 return return elif opc == 1017: return elif opc == 1018: self.halt == 1 elif opc == 1019: print self.stack return elif opc == 1020: a = self.stack.pop() print a return elif opc == 1021: a = self.stack.pop() self.stack.append(a) self.stack.append(a) def run_script(self, script): self.ip = 0 script_len = len(script) while(1): if self.halt: return if self.ip == script_len: return self.decode_op(script[self.ip]) self.ip += 1 vm = inter()f = file('d:/vm1.bpl')script = []while(1): a = f.readline() if not a: break script.append(a) vm.run_script(script)class inter: def __init__(self): self.mem = [] self.stack = [] self.ip = 0 self.halt = 0 def get_instr(self, op): op = op.split(" ") if op[0][0] == '#': return None return int(op[0]) def get_arg1(self, op): op = op.split(" ") return self.numeric(op[1]) def get_arg2(self, op): op = op.split(" ") return self.numeric(op[2]) def numeric(self, expr): if expr.find('.') == -1: return int(expr) return float(expr) def decode_op(self, op): opc = self.get_instr(op) if not opc: return if opc == 1000: a = self.stack.pop() b = self.stack.pop() self.stack.append(a + b) return elif opc == 1001: a = self.stack.pop() b = self.stack.pop() self.stack.append(b - a) return elif opc == 1002: a = self.stack.pop() b = self.stack.pop() self.stack.append(a * b) return elif opc == 1003: a = self.stack.pop() b = self.stack.pop() self.stack.append(float(b) / a) return elif opc == 1004: a = self.stack.pop() b = self.stack.pop() if a == b: self.stack.append(1) return self.stack.append(0) return elif opc == 1005: a = self.stack.pop() b = self.stack.pop() if b > a: self.stack.append(1) return self.stack.append(0) return elif opc == 1006: a = self.stack.pop() b = self.stack.pop() if a > b: self.stack.append(1) return self.stack.append(0) return elif opc == 1007: a = self.stack.pop() b = self.stack.pop() if b >= a: self.stack.append(1) return self.stack.append(0) return elif opc == 1008: a = self.stack.pop() b = self.stack.pop() if a >= b: self.stack.append(1) return self.stack.append(0) return elif opc == 1009: a = self.stack.pop() a -= 1 self.stack.append(a) return elif opc == 1010: a = self.get_arg1(op) self.stack.append(a) return elif opc == 1011: a = self.get_arg1(op) b = self.get_arg2(op) self.mem[a] = b return elif opc == 1012: a = self.get_arg1(op) self.stack.append(self.mem[a]) return elif opc == 1013: a = self.get_arg1(op) self.mem[a] = self.stack.pop() return elif opc == 1014: a = self.get_arg1(op) self.ip = a - 2 return elif opc == 1015: a = self.stack.pop() if a: self.ip = self.get_arg1(op) - 2 return return elif opc == 1016: a = self.stack.pop() if not a: self.ip = self.get_arg1(op) - 2 return return elif opc == 1017: return elif opc == 1018: self.halt == 1 elif opc == 1019: print self.stack return elif opc == 1020: a = self.stack.pop() print a return elif opc == 1021: a = self.stack.pop() self.stack.append(a) self.stack.append(a) def run_script(self, script): self.ip = 0 script_len = len(script) while(1): if self.halt: return if self.ip == script_len: return self.decode_op(script[self.ip]) self.ip += 1 vm = inter()f = file('d:/vm1.bpl')script = []while(1): a = f.readline() if not a: break script.append(a) vm.run_script(script)