class Node(object): def __init__(self, children=None): self.children = children if self.children is None: self.children = [] def visit(self, callback, *args): callback(self, *args) for c in self.children: c.visit(callback, *args) class StatementNode(Node): def __init__(self, children=None): Node.__init__(self, children) class ExprNode(Node): def __init__(self, children=None): Node.__init__(self, children) class CExprNode(ExprNode): def __init__(self, cstring): ExprNode.__init__(self) self.cstring = cstring class UnitNode(Node): def __init__(self, children=None): Node.__init__(self, children) class FunctionNode(Node): def __init__(self, name, ret_type, children=None): Node.__init__(self, children) self.name = name self.ret_type = ret_type