prettyprint_visitor.py 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142
  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. self.result = ""
  21. def visit(self, tree, level=0):
  22. if isinstance(tree, Tree):
  23. if tree.is_rule() and len(tree.get_tail()) > 1:
  24. self.result += '\n' + '\t' * level + tree.head
  25. if not tree.head.startswith("implicit_autogenerated_"):
  26. for child in tree.tail:
  27. self.visit(child, level+1)
  28. else:
  29. if not tree.head.startswith("implicit_autogenerated_"):
  30. for child in tree.tail:
  31. self.visit(child, level)
  32. else:
  33. self.result += '\n' + '\t' * level + '(' + repr(tree) + ')'
  34. def dump(self):
  35. return self.result