prettyprint_visitor.py 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. from hutnparser import Tree
  2. from visitor import Visitor
  3. class PrintVisitor(Visitor):
  4. def __init__(self, args):
  5. Visitor.__init__(self, args)
  6. self.result = ''
  7. pass
  8. def visit(self, tree, level=0):
  9. if isinstance(tree, Tree):
  10. self.result += '\n' + '\t' * level + tree.head
  11. for child in tree.tail:
  12. self.visit(child, level+1)
  13. else:
  14. self.result += '(' + repr(tree) + ')'
  15. def dump(self):
  16. return self.result
  17. class PrettyPrintVisitor(Visitor):
  18. def __init__(self, args):
  19. Visitor.__init__(self, args)
  20. def visit(self, tree, level=0):
  21. if isinstance(tree, Tree):
  22. if tree.is_rule() and len(tree.get_tail()) > 1:
  23. self.result += '\n' + '\t' * level + tree.head
  24. if not tree.head.startswith("implicit_autogenerated_"):
  25. for child in tree.tail:
  26. self.visit(child, level+1)
  27. else:
  28. if not tree.head.startswith("implicit_autogenerated_"):
  29. for child in tree.tail:
  30. self.visit(child, level)
  31. else:
  32. self.result += '\n' + '\t' * level + '(' + repr(tree) + ')'
  33. def dump(self):
  34. return self.result