All pastes #35530 Raw Edit

Anonymous

public python v1 · immutable
#35530 ·published 2006-01-02 14:35 UTC
rendered paste body
def 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)import typesclass stack:		def __init__(self):		self.stack = []		def push(self, val):		self.stack.append(val)		def pop(self):		if len(self.stack) <> 0:			return self.stack.pop()		raise Warning, 'Pop from empty stack, returning 1'		return 1		def get_slen(self):		return len(self.stack)		sp = property(get_slen)	tos = property(pop, push)		class emulator:		def __init__(self):		self.mem = {}		self.stack = stack()		self.registers = ['ax', 'bx', 'cx', 'dx']		self.symbols = {}		self.alpha = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"		self.legal_symbols = "_|<>0123456789"		self.ident = self.alpha + self.legal_symbols	def is_numeric(self, expr):		for char in expr:			if not char in '0123456789.':				return 0			return 1		def is_ident(self, expr):		if len(expr) == 1 and expr in self.ident: return 1		if not expr[0] in self.alpha: return 0		for char in expr[1:]:			if not char in self.ident:				return 0			return 1			def is_symbol(self, expr):		if expr in self.symbols.keys(): return 1		return 0			def numeric(self, expr):		if expr.find(".") == -1:			return int(expr)		return float(expr)			def code(self, op):		x = 0		letter = op[0]		oplen = len(op)		while letter <> " " and letter <> "\t":			x += 1			if x == oplen:				return op			letter = op[x]		opcode = op[:x]		args = op[x + 1:]		args = args.split(',')		for x in range(len(args)):			args[x] = args[x].replace(" ", "")			args[x] = args[x].replace("\t", "")			args[x] = args[x].replace("\n", "")		return [opcode, args]	def error(self, expr):		print "%s on line %s" % (expr, self.ip)		self.halt = 1	def decode(self, op):		coded = self.code(op)		if type(coded) is types.ListType:			opcode = coded[0]			args = coded[1]		else:			opcode = coded			args = []		if opcode == "var":			for arg in args:				expr = arg.split("=")				argnum = len(expr)				if argnum == 1:					if self.ident(expr):						self.symbols[expr] == 0					else:						self.error('SyntaxError: expected identifier')						return				elif argnum == 2:					if expr[1] <> "":						self.symbols[expr[0]] = self.numeric(expr[1])					else:						self.error('SyntaxError: expected integer or float constant')						return				else:					self.error('SyntaxError')					return		elif opcode == "sym_table_dump":			print self.symbols				def run(self, script):		for op in script:			self.decode(op)			f = file('d:/source.bpl', 'r')script = []while(1):	a = f.readline()	#print a	if not a:		break	script.append(a)emu = emulator()emu.run(script)