mirror of
				https://github.com/python/cpython.git
				synced 2025-10-31 05:31:20 +00:00 
			
		
		
		
	
		
			
	
	
		
			690 lines
		
	
	
	
		
			15 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
		
		
			
		
	
	
			690 lines
		
	
	
	
		
			15 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
|   | import types | ||
|  | 
 | ||
|  | nodes = {} | ||
|  | 
 | ||
|  | def flatten(list): | ||
|  |   l = [] | ||
|  |   for elt in list: | ||
|  |     if type(elt) is types.TupleType: | ||
|  |       for elt2 in flatten(elt): | ||
|  |         l.append(elt2) | ||
|  |     elif type(elt) is types.ListType: | ||
|  |       for elt2 in flatten(elt): | ||
|  |         l.append(elt2) | ||
|  |     else: | ||
|  |       l.append(elt) | ||
|  |   return l | ||
|  | 
 | ||
|  | def asList(nodes): | ||
|  |   l = [] | ||
|  |   for item in nodes: | ||
|  |     if hasattr(item, "asList"): | ||
|  |       l.append(item.asList()) | ||
|  |     else: | ||
|  |       if type(item) is types.TupleType: | ||
|  |         l.append(tuple(asList(item))) | ||
|  |       elif type(item) is types.ListType: | ||
|  |         l.append(asList(item)) | ||
|  |       else: | ||
|  |         l.append(item) | ||
|  |   return l | ||
|  | 
 | ||
|  | class Node: | ||
|  |   def __init__(self, *args): | ||
|  |     self._children = args | ||
|  |     self.lineno = None | ||
|  |   def __getitem__(self, index): | ||
|  |     return self._children[index] | ||
|  |   def __repr__(self): | ||
|  |     return "<Node %s>" % self._children[0] | ||
|  |   def __len__(self): | ||
|  |     return len(self._children) | ||
|  |   def __getslice__(self, low, high): | ||
|  |     return self._children[low:high] | ||
|  |   def getChildren(self): | ||
|  |     return tuple(flatten(self._children[1:])) | ||
|  |   def getType(self): | ||
|  |     return self._children[0] | ||
|  |   def asList(self): | ||
|  |     return tuple(asList(self._children)) | ||
|  | 
 | ||
|  | class EmptyNode(Node): | ||
|  |   def __init__(self): | ||
|  |     self.lineno = None | ||
|  | 
 | ||
|  | class Module(Node): | ||
|  |   nodes['module'] = 'Module' | ||
|  | 
 | ||
|  |   def __init__(self, doc, node): | ||
|  |     self.doc = doc | ||
|  |     self.node = node | ||
|  |     self._children = ('module', doc, node) | ||
|  | 
 | ||
|  |   def __repr__(self): | ||
|  |     return "Module(%s,%s)" % self._children[1:] | ||
|  | 
 | ||
|  | class Stmt(Node): | ||
|  |   nodes['stmt'] = 'Stmt' | ||
|  | 
 | ||
|  |   def __init__(self, nodes): | ||
|  |     self.nodes = nodes | ||
|  |     self._children = ('stmt', nodes) | ||
|  | 
 | ||
|  |   def __repr__(self): | ||
|  |     return "Stmt(%s)" % self._children[1:] | ||
|  | 
 | ||
|  | class Function(Node): | ||
|  |   nodes['function'] = 'Function' | ||
|  | 
 | ||
|  |   def __init__(self, name, argnames, defaults, flags, doc, code): | ||
|  |     self.name = name | ||
|  |     self.argnames = argnames | ||
|  |     self.defaults = defaults | ||
|  |     self.flags = flags | ||
|  |     self.doc = doc | ||
|  |     self.code = code | ||
|  |     self._children = ('function', | ||
|  |                        name, argnames, defaults, flags, doc, code) | ||
|  | 
 | ||
|  |   def __repr__(self): | ||
|  |     return "Function(%s,%s,%s,%s,%s,%s)" % self._children[1:] | ||
|  | 
 | ||
|  | class Lambda(Node): | ||
|  |   nodes['lambda'] = 'Lambda' | ||
|  | 
 | ||
|  |   def __init__(self, argnames, defaults, flags, code): | ||
|  |     self.argnames = argnames | ||
|  |     self.defaults = defaults | ||
|  |     self.flags = flags | ||
|  |     self.code = code | ||
|  |     self._children = ('lambda', argnames, defaults, flags, code) | ||
|  | 
 | ||
|  |   def __repr__(self): | ||
|  |     return "Lambda(%s,%s,%s,%s)" % self._children[1:] | ||
|  | 
 | ||
|  | class Classdef(Node): | ||
|  |   nodes['classdef'] = 'Classdef' | ||
|  | 
 | ||
|  |   def __init__(self, name, bases, doc, code): | ||
|  |     self.name = name | ||
|  |     self.bases = bases | ||
|  |     self.doc = doc | ||
|  |     self.code = code | ||
|  |     self._children = ('classdef', name, bases, doc, code) | ||
|  | 
 | ||
|  |   def __repr__(self): | ||
|  |     return "Classdef(%s,%s,%s,%s)" % self._children[1:] | ||
|  | 
 | ||
|  | class Pass(EmptyNode): | ||
|  |   nodes['pass'] = 'Pass' | ||
|  |   _children = ('pass',) | ||
|  |   def __repr__(self): | ||
|  |     return "Pass()" | ||
|  | 
 | ||
|  | class Break(EmptyNode): | ||
|  |   nodes['break'] = 'Break' | ||
|  |   _children = ('break',) | ||
|  |   def __repr__(self): | ||
|  |     return "Break()" | ||
|  | 
 | ||
|  | class Continue(EmptyNode): | ||
|  |   nodes['continue'] = 'Continue' | ||
|  |   _children = ('continue',) | ||
|  |   def __repr__(self): | ||
|  |     return "Continue()" | ||
|  | 
 | ||
|  | class For(Node): | ||
|  |   nodes['for'] = 'For' | ||
|  | 
 | ||
|  |   def __init__(self, assign, list, body, else_): | ||
|  |     self.assign = assign | ||
|  |     self.list = list | ||
|  |     self.body = body | ||
|  |     self.else_ = else_ | ||
|  |     self._children = ('for', assign, list, body, else_) | ||
|  | 
 | ||
|  |   def __repr__(self): | ||
|  |     return "For(%s,%s,%s,%s)" % self._children[1:] | ||
|  | 
 | ||
|  | class While(Node): | ||
|  |   nodes['while'] = 'While' | ||
|  | 
 | ||
|  |   def __init__(self, test, body, else_): | ||
|  |     self.test = test | ||
|  |     self.body = body | ||
|  |     self.else_ = else_ | ||
|  |     self._children = ('while', test, body, else_) | ||
|  | 
 | ||
|  |   def __repr__(self): | ||
|  |     return "While(%s,%s,%s)" % self._children[1:] | ||
|  | 
 | ||
|  | class If(Node): | ||
|  |   """if: [ (testNode, suiteNode), ...], elseNode""" | ||
|  |   nodes['if'] = 'If' | ||
|  | 
 | ||
|  |   def __init__(self, tests, else_): | ||
|  |     self.tests = tests | ||
|  |     self.else_ = else_ | ||
|  |     self._children = ('if', tests, else_) | ||
|  | 
 | ||
|  |   def __repr__(self): | ||
|  |     return "If(%s,%s)" % self._children[1:] | ||
|  | 
 | ||
|  | class Exec(Node): | ||
|  |   nodes['exec'] = 'Exec' | ||
|  | 
 | ||
|  |   def __init__(self, expr1, expr2, expr3): | ||
|  |     self.expr1 = expr1 | ||
|  |     self.expr2 = expr2 | ||
|  |     self.expr3 = expr3 | ||
|  |     self._children = ('exec', expr1, expr2, expr3) | ||
|  | 
 | ||
|  |   def __repr__(self): | ||
|  |     return "Exec(%s,%s,%s)" % self._children[1:] | ||
|  | 
 | ||
|  | class From(Node): | ||
|  |   nodes['from'] = 'From' | ||
|  | 
 | ||
|  |   def __init__(self, modname, names): | ||
|  |     self.modname = modname | ||
|  |     self.names = names | ||
|  |     self._children = ('from', modname, names) | ||
|  | 
 | ||
|  |   def __repr__(self): | ||
|  |     return "From(%s,%s)" % self._children[1:] | ||
|  | 
 | ||
|  | class Import(Node): | ||
|  |   nodes['import'] = 'Import' | ||
|  | 
 | ||
|  |   def __init__(self, names): | ||
|  |     self.names = names | ||
|  |     self._children = ('import', names) | ||
|  | 
 | ||
|  |   def __repr__(self): | ||
|  |     return "Import(%s)" % self._children[1:] | ||
|  | 
 | ||
|  | class Raise(Node): | ||
|  |   nodes['raise'] = 'Raise' | ||
|  | 
 | ||
|  |   def __init__(self, expr1, expr2, expr3): | ||
|  |     self.expr1 = expr1 | ||
|  |     self.expr2 = expr2 | ||
|  |     self.expr3 = expr3 | ||
|  |     self._children = ('raise', expr1, expr2, expr3) | ||
|  | 
 | ||
|  |   def __repr__(self): | ||
|  |     return "Raise(%s,%s,%s)" % self._children[1:] | ||
|  | 
 | ||
|  | class Tryfinally(Node): | ||
|  |   nodes['tryfinally'] = 'Tryfinally' | ||
|  | 
 | ||
|  |   def __init__(self, try_, fin): | ||
|  |     self.try_ = try_ | ||
|  |     self.fin = fin | ||
|  |     self._children = ('tryfinally', try_, fin) | ||
|  | 
 | ||
|  |   def __repr__(self): | ||
|  |     return "Tryfinally(%s,%s)" % self._children[1:] | ||
|  | 
 | ||
|  | class Tryexcept(Node): | ||
|  |   nodes['tryexcept'] = 'Tryexcept' | ||
|  | 
 | ||
|  |   def __init__(self, try_, excs, else_): | ||
|  |     self.try_ = try_ | ||
|  |     self.excs = excs | ||
|  |     self.else_ = else_ | ||
|  |     self._children = ('tryexcept', try_, excs, else_) | ||
|  | 
 | ||
|  |   def __repr__(self): | ||
|  |     return "Tryexcept(%s,%s,%s)" % self._children[1:] | ||
|  | 
 | ||
|  | class Return(Node): | ||
|  |   nodes['return'] = 'Return' | ||
|  | 
 | ||
|  |   def __init__(self, value): | ||
|  |     self.value = value | ||
|  |     self._children = ('return', value) | ||
|  | 
 | ||
|  |   def __repr__(self): | ||
|  |     return "Return(%s)" % self._children[1:] | ||
|  | 
 | ||
|  | class Const(Node): | ||
|  |   nodes['const'] = 'Const' | ||
|  | 
 | ||
|  |   def __init__(self, value): | ||
|  |     self.value = value | ||
|  |     self._children = ('const', value) | ||
|  | 
 | ||
|  |   def __repr__(self): | ||
|  |     return "Const(%s)" % self._children[1:] | ||
|  | 
 | ||
|  | class Print(Node): | ||
|  |   nodes['print'] = 'Print' | ||
|  | 
 | ||
|  |   def __init__(self, nodes): | ||
|  |     self.nodes = nodes | ||
|  |     self._children = ('print', nodes) | ||
|  | 
 | ||
|  |   def __repr__(self): | ||
|  |     return "Print(%s)" % self._children[1:] | ||
|  | 
 | ||
|  | class Printnl(Node): | ||
|  |   nodes['printnl'] = 'Printnl' | ||
|  | 
 | ||
|  |   def __init__(self, nodes): | ||
|  |     self.nodes = nodes | ||
|  |     self._children = ('printnl', nodes) | ||
|  | 
 | ||
|  |   def __repr__(self): | ||
|  |     return "Printnl(%s)" % self._children[1:] | ||
|  | 
 | ||
|  | class Discard(Node): | ||
|  |   nodes['discard'] = 'Discard' | ||
|  | 
 | ||
|  |   def __init__(self, expr): | ||
|  |     self.expr = expr | ||
|  |     self._children = ('discard', expr) | ||
|  | 
 | ||
|  |   def __repr__(self): | ||
|  |     return "Discard(%s)" % self._children[1:] | ||
|  | 
 | ||
|  | class Assign(Node): | ||
|  |   nodes['assign'] = 'Assign' | ||
|  | 
 | ||
|  |   def __init__(self, nodes, expr): | ||
|  |     self.nodes = nodes | ||
|  |     self.expr = expr | ||
|  |     self._children = ('assign', nodes, expr) | ||
|  | 
 | ||
|  |   def __repr__(self): | ||
|  |     return "Assign(%s,%s)" % self._children[1:] | ||
|  | 
 | ||
|  | class AssTuple(Node): | ||
|  |   nodes['ass_tuple'] = 'AssTuple' | ||
|  | 
 | ||
|  |   def __init__(self, nodes): | ||
|  |     self.nodes = nodes | ||
|  |     self._children = ('ass_tuple', nodes) | ||
|  | 
 | ||
|  |   def __repr__(self): | ||
|  |     return "AssTuple(%s)" % self._children[1:] | ||
|  | 
 | ||
|  | class AssList(Node): | ||
|  |   nodes['ass_list'] = 'AssList' | ||
|  | 
 | ||
|  |   def __init__(self, nodes): | ||
|  |     self.nodes = nodes | ||
|  |     self._children = ('ass_list', nodes) | ||
|  | 
 | ||
|  |   def __repr__(self): | ||
|  |     return "AssList(%s)" % self._children[1:] | ||
|  | 
 | ||
|  | class AssName(Node): | ||
|  |   nodes['ass_name'] = 'AssName' | ||
|  | 
 | ||
|  |   def __init__(self, name, flags): | ||
|  |     self.name = name | ||
|  |     self.flags = flags | ||
|  |     self._children = ('ass_name', name, flags) | ||
|  | 
 | ||
|  |   def __repr__(self): | ||
|  |     return "AssName(%s,%s)" % self._children[1:] | ||
|  | 
 | ||
|  | class AssAttr(Node): | ||
|  |   nodes['ass_attr'] = 'AssAttr' | ||
|  | 
 | ||
|  |   def __init__(self, expr, attrname, flags): | ||
|  |     self.expr = expr | ||
|  |     self.attrname = attrname | ||
|  |     self.flags = flags | ||
|  |     self._children = ('ass_attr', expr, attrname, flags) | ||
|  | 
 | ||
|  |   def __repr__(self): | ||
|  |     return "AssAttr(%s,%s,%s)" % self._children[1:] | ||
|  | 
 | ||
|  | class List(Node): | ||
|  |   nodes['list'] = 'List' | ||
|  | 
 | ||
|  |   def __init__(self, nodes): | ||
|  |     self.nodes = nodes | ||
|  |     self._children = ('list', nodes) | ||
|  | 
 | ||
|  |   def __repr__(self): | ||
|  |     return "List(%s)" % self._children[1:] | ||
|  | 
 | ||
|  | class Dict(Node): | ||
|  |   nodes['dict'] = 'Dict' | ||
|  | 
 | ||
|  |   def __init__(self, keys): | ||
|  |     self.keys = keys | ||
|  |     self._children = ('dict', keys) | ||
|  | 
 | ||
|  |   def __repr__(self): | ||
|  |     return "Dict(%s)" % self._children[1:] | ||
|  | 
 | ||
|  | class Not(Node): | ||
|  |   nodes['not'] = 'Not' | ||
|  | 
 | ||
|  |   def __init__(self, expr): | ||
|  |     self.expr = expr | ||
|  |     self._children = ('not', expr) | ||
|  | 
 | ||
|  |   def __repr__(self): | ||
|  |     return "Not(%s)" % self._children[1:] | ||
|  | 
 | ||
|  | class Compare(Node): | ||
|  |   nodes['compare'] = 'Compare' | ||
|  | 
 | ||
|  |   def __init__(self, expr, ops): | ||
|  |     self.expr = expr | ||
|  |     self.ops = ops | ||
|  |     self._children = ('compare', expr, ops) | ||
|  | 
 | ||
|  |   def __repr__(self): | ||
|  |     return "Compare(%s,%s)" % self._children[1:] | ||
|  | 
 | ||
|  | class Name(Node): | ||
|  |   nodes['name'] = 'Name' | ||
|  | 
 | ||
|  |   def __init__(self, name): | ||
|  |     self.name = name | ||
|  |     self._children = ('name', name) | ||
|  | 
 | ||
|  |   def __repr__(self): | ||
|  |     return "Name(%s)" % self._children[1:] | ||
|  | 
 | ||
|  | class Global(Node): | ||
|  |   nodes['global'] = 'Global' | ||
|  | 
 | ||
|  |   def __init__(self, names): | ||
|  |     self.names = names | ||
|  |     self._children = ('global', names) | ||
|  | 
 | ||
|  |   def __repr__(self): | ||
|  |     return "Global(%s)" % self._children[1:] | ||
|  | 
 | ||
|  | class Backquote(Node): | ||
|  |   nodes['backquote'] = 'Backquote' | ||
|  | 
 | ||
|  |   def __init__(self, node): | ||
|  |     self.node = node | ||
|  |     self._children = ('backquote', node) | ||
|  | 
 | ||
|  |   def __repr__(self): | ||
|  |     return "Backquote(%s)" % self._children[1:] | ||
|  | 
 | ||
|  | class Getattr(Node): | ||
|  |   nodes['getattr'] = 'Getattr' | ||
|  | 
 | ||
|  |   def __init__(self, expr, attrname): | ||
|  |     self.expr = expr | ||
|  |     self.attrname = attrname | ||
|  |     self._children = ('getattr', expr, attrname) | ||
|  | 
 | ||
|  |   def __repr__(self): | ||
|  |     return "Getattr(%s,%s)" % self._children[1:] | ||
|  | 
 | ||
|  | class CallFunc(Node): | ||
|  |   nodes['call_func'] = 'CallFunc' | ||
|  | 
 | ||
|  |   def __init__(self, node, args): | ||
|  |     self.node = node | ||
|  |     self.args = args | ||
|  |     self._children = ('call_func', node, args) | ||
|  | 
 | ||
|  |   def __repr__(self): | ||
|  |     return "CallFunc(%s,%s)" % self._children[1:] | ||
|  | 
 | ||
|  | class Keyword(Node): | ||
|  |   nodes['keyword'] = 'Keyword' | ||
|  | 
 | ||
|  |   def __init__(self, name, expr): | ||
|  |     self.name = name | ||
|  |     self.expr = expr | ||
|  |     self._children = ('keyword', name, expr) | ||
|  | 
 | ||
|  |   def __repr__(self): | ||
|  |     return "Keyword(%s,%s)" % self._children[1:] | ||
|  | 
 | ||
|  | class Subscript(Node): | ||
|  |   nodes['subscript'] = 'Subscript' | ||
|  | 
 | ||
|  |   def __init__(self, expr, flags, subs): | ||
|  |     self.expr = expr | ||
|  |     self.flags = flags | ||
|  |     self.subs = subs | ||
|  |     self._children = ('subscript', expr, flags, subs) | ||
|  | 
 | ||
|  |   def __repr__(self): | ||
|  |     return "Subscript(%s,%s,%s)" % self._children[1:] | ||
|  | 
 | ||
|  | class Ellipsis(EmptyNode): | ||
|  |   nodes['ellipsis'] = 'Ellipsis' | ||
|  |   _children = ('ellipsis',) | ||
|  |   def __repr__(self): | ||
|  |     return "Ellipsis()" | ||
|  | 
 | ||
|  | class Sliceobj(Node): | ||
|  |   nodes['sliceobj'] = 'Sliceobj' | ||
|  | 
 | ||
|  |   def __init__(self, nodes): | ||
|  |     self.nodes = nodes | ||
|  |     self._children = ('sliceobj', nodes) | ||
|  | 
 | ||
|  |   def __repr__(self): | ||
|  |     return "Sliceobj(%s)" % self._children[1:] | ||
|  | 
 | ||
|  | class Slice(Node): | ||
|  |   nodes['slice'] = 'Slice' | ||
|  | 
 | ||
|  |   def __init__(self, expr, flags, lower, upper): | ||
|  |     self.expr = expr | ||
|  |     self.flags = flags | ||
|  |     self.lower = lower | ||
|  |     self.upper = upper | ||
|  |     self._children = ('slice', expr, flags, lower, upper) | ||
|  | 
 | ||
|  |   def __repr__(self): | ||
|  |     return "Slice(%s,%s,%s,%s)" % self._children[1:] | ||
|  | 
 | ||
|  | class Assert(Node): | ||
|  |   nodes['assert'] = 'Assert' | ||
|  | 
 | ||
|  |   def __init__(self, expr1, expr2): | ||
|  |     self.expr1 = expr1 | ||
|  |     self.expr2 = expr2 | ||
|  |     self._children = ('assert', expr1, expr2) | ||
|  | 
 | ||
|  |   def __repr__(self): | ||
|  |     return "Assert(%s,%s)" % self._children[1:] | ||
|  | 
 | ||
|  | class Tuple(Node): | ||
|  |   nodes['tuple'] = 'Tuple' | ||
|  | 
 | ||
|  |   def __init__(self, nodes): | ||
|  |     self.nodes = nodes | ||
|  |     self._children = ('tuple', nodes) | ||
|  | 
 | ||
|  |   def __repr__(self): | ||
|  |     return "Tuple(%s)" % self._children[1:] | ||
|  | 
 | ||
|  | class Or(Node): | ||
|  |   nodes['or'] = 'Or' | ||
|  | 
 | ||
|  |   def __init__(self, nodes): | ||
|  |     self.nodes = nodes | ||
|  |     self._children = ('or', nodes) | ||
|  | 
 | ||
|  |   def __repr__(self): | ||
|  |     return "Or(%s)" % self._children[1:] | ||
|  | 
 | ||
|  | class And(Node): | ||
|  |   nodes['and'] = 'And' | ||
|  | 
 | ||
|  |   def __init__(self, nodes): | ||
|  |     self.nodes = nodes | ||
|  |     self._children = ('and', nodes) | ||
|  | 
 | ||
|  |   def __repr__(self): | ||
|  |     return "And(%s)" % self._children[1:] | ||
|  | 
 | ||
|  | class Bitor(Node): | ||
|  |   nodes['bitor'] = 'Bitor' | ||
|  | 
 | ||
|  |   def __init__(self, nodes): | ||
|  |     self.nodes = nodes | ||
|  |     self._children = ('bitor', nodes) | ||
|  | 
 | ||
|  |   def __repr__(self): | ||
|  |     return "Bitor(%s)" % self._children[1:] | ||
|  | 
 | ||
|  | class Bitxor(Node): | ||
|  |   nodes['bitxor'] = 'Bitxor' | ||
|  | 
 | ||
|  |   def __init__(self, nodes): | ||
|  |     self.nodes = nodes | ||
|  |     self._children = ('bitxor', nodes) | ||
|  | 
 | ||
|  |   def __repr__(self): | ||
|  |     return "Bitxor(%s)" % self._children[1:] | ||
|  | 
 | ||
|  | class Bitand(Node): | ||
|  |   nodes['bitand'] = 'Bitand' | ||
|  | 
 | ||
|  |   def __init__(self, nodes): | ||
|  |     self.nodes = nodes | ||
|  |     self._children = ('bitand', nodes) | ||
|  | 
 | ||
|  |   def __repr__(self): | ||
|  |     return "Bitand(%s)" % self._children[1:] | ||
|  | 
 | ||
|  | class LeftShift(Node): | ||
|  |   nodes['<<'] = 'LeftShift' | ||
|  | 
 | ||
|  |   def __init__(self, (expr, shift)): | ||
|  |     self.expr = expr | ||
|  |     self.shift = shift | ||
|  |     self._children = ('<<', (expr, shift)) | ||
|  | 
 | ||
|  |   def __repr__(self): | ||
|  |     return "LeftShift(%s,%s)" % self._children[1:] | ||
|  | 
 | ||
|  | class RightShift(Node): | ||
|  |   nodes['>>'] = 'RightShift' | ||
|  | 
 | ||
|  |   def __init__(self, (expr, shift)): | ||
|  |     self.expr = expr | ||
|  |     self.shift = shift | ||
|  |     self._children = ('>>', (expr, shift)) | ||
|  | 
 | ||
|  |   def __repr__(self): | ||
|  |     return "RightShift(%s,%s)" % self._children[1:] | ||
|  | 
 | ||
|  | class Add(Node): | ||
|  |   nodes['+'] = 'Add' | ||
|  | 
 | ||
|  |   def __init__(self, (left, right)): | ||
|  |     self.left = left | ||
|  |     self.right = right | ||
|  |     self._children = ('+', (left, right)) | ||
|  | 
 | ||
|  |   def __repr__(self): | ||
|  |     return "Add(%s)" % self._children[1:] | ||
|  | 
 | ||
|  | class Sub(Node): | ||
|  |   nodes['-'] = 'Sub' | ||
|  | 
 | ||
|  |   def __init__(self, (left, right)): | ||
|  |     self.left = left | ||
|  |     self.right = right | ||
|  |     self._children = ('-', (left, right)) | ||
|  | 
 | ||
|  |   def __repr__(self): | ||
|  |     return "Sub(%s)" % self._children[1:] | ||
|  | 
 | ||
|  | class Mul(Node): | ||
|  |   nodes['*'] = 'Mul' | ||
|  | 
 | ||
|  |   def __init__(self, (left, right)): | ||
|  |     self.left = left | ||
|  |     self.right = right | ||
|  |     self._children = ('*', (left, right)) | ||
|  | 
 | ||
|  |   def __repr__(self): | ||
|  |     return "Mul(%s)" % self._children[1:] | ||
|  | 
 | ||
|  | class Div(Node): | ||
|  |   nodes['/'] = 'Div' | ||
|  | 
 | ||
|  |   def __init__(self, (left, right)): | ||
|  |     self.left = left | ||
|  |     self.right = right | ||
|  |     self._children = ('/', (left, right)) | ||
|  | 
 | ||
|  |   def __repr__(self): | ||
|  |     return "Div(%s)" % self._children[1:] | ||
|  | 
 | ||
|  | class Mod(Node): | ||
|  |   nodes['%'] = 'Mod' | ||
|  | 
 | ||
|  |   def __init__(self, (left, right)): | ||
|  |     self.left = left | ||
|  |     self.right = right | ||
|  |     self._children = ('%', (left, right)) | ||
|  | 
 | ||
|  |   def __repr__(self): | ||
|  |     return "Mod(%s)" % self._children[1:] | ||
|  | 
 | ||
|  | class Power(Node): | ||
|  |   nodes['power'] = 'Power' | ||
|  | 
 | ||
|  |   def __init__(self, (left, right)): | ||
|  |     self.left = left | ||
|  |     self.right = right | ||
|  |     self._children = ('power', (left, right)) | ||
|  | 
 | ||
|  |   def __repr__(self): | ||
|  |     return "Power(%s)" % self._children[1:] | ||
|  | 
 | ||
|  | class UnaryAdd(Node): | ||
|  |   nodes['unary+'] = 'UnaryAdd' | ||
|  | 
 | ||
|  |   def __init__(self, node): | ||
|  |     self.node = node | ||
|  |     self._children = ('unary+', node) | ||
|  | 
 | ||
|  |   def __repr__(self): | ||
|  |     return "UnaryAdd(%s)" % self._children[1:] | ||
|  | 
 | ||
|  | class UnarySub(Node): | ||
|  |   nodes['unary-'] = 'UnarySub' | ||
|  | 
 | ||
|  |   def __init__(self, node): | ||
|  |     self.node = node | ||
|  |     self._children = ('unary-', node) | ||
|  | 
 | ||
|  |   def __repr__(self): | ||
|  |     return "UnarySub(%s)" % self._children[1:] | ||
|  | 
 | ||
|  | class Invert(Node): | ||
|  |   nodes['invert'] = 'Invert' | ||
|  | 
 | ||
|  |   def __init__(self, node): | ||
|  |     self.node = node | ||
|  |     self._children = ('invert', node) | ||
|  | 
 | ||
|  |   def __repr__(self): | ||
|  |     return "Invert(%s)" % self._children[1:] | ||
|  | 
 | ||
|  | # now clean up the nodes dictionary | ||
|  | klasses = globals() | ||
|  | for k in nodes.keys(): | ||
|  |   nodes[k] = klasses[nodes[k]] | ||
|  | 
 | ||
|  | # Local Variables:           | ||
|  | # mode:python                | ||
|  | # indent-tabs-mode: nil      | ||
|  | # py-indent-offset: 2        | ||
|  | # py-smart-indentation: nil  | ||
|  | # End:                       |