All pastes #761572 Raw Edit

Mine

public python v1 · immutable
·published 2007-11-04 23:34 UTC
rendered paste body
class MatchFailure(Exception):	passclass Matcher(object):	def __init__(self, node):		self.node = node		self.child = None				self.match = self.matchNormal		self.compare = None		def __or__(self, right):		self.match = self.matchOr		self.compare = right		return self		def __xor__(self, right):		self.match = self.matchLongest		self.compare = right		return self		def __and__(self, right):		self.match = self.matchAnd		self.compare = right		return self		def matchNormal(self, data):		if not isinstance(data, self.node):			raise MatchFailure				if self.children == None:			try:								return data		def __call__(self, child):		if len(children) > 0:			self.children = children		else:			self.children = None		return selfdef MatchFunction(func):	save = {}	for name in func.func_code.co_names:		if name in func.func_globals:			save[name] = func.func_globals		func.func_globals[name] = Matcher(eval(name))		tree = func()		for name in func.func_code.co_names:		if name in save:			func.func_globals[name] = save[name]		else:			del func.func_globals[name]		return tree.matchif __name__=='__main__':	@MatchFunction	def testMatcher():		# return tuple(list(dict) | list | dict)		test = dict		return tuple(test)		test = (['Just a list'], {'foo' : 'bar'}, [{'Nested dict' : 'in list'}])		print testMatcher(test)