from hutn_compiler.hutnparser import Tree from hutn_compiler.visitor import Visitor class PrintVisitor(Visitor): def __init__(self, args): Visitor.__init__(self, args) self.result = '' pass def visit(self, tree, level=0): if isinstance(tree, dict): self.result += '\n' + '\t' * level + tree['head'] for child in tree['tail']: self.visit(child, level+1) else: self.result += '(' + repr(tree) + ')' def dump(self): return self.result class PrettyPrintVisitor(Visitor): def __init__(self, args): Visitor.__init__(self, args) self.result = "" def visit(self, tree, level=0): if isinstance(tree, dict): if tree.is_rule() and len(Tree.get_tail(tree)) > 1: self.result += '\n' + '\t' * level + tree['head'] if not tree['head'].startswith("implicit_autogenerated_"): for child in tree['tail']: self.visit(child, level+1) else: if not tree['head'].startswith("implicit_autogenerated_"): for child in tree['tail']: self.visit(child, level) else: self.result += '\n' + '\t' * level + '(' + repr(tree) + ')' def dump(self): return self.result