visitor.py 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178
  1. import hutn_compiler.symbol_table as st
  2. from hutn_compiler.hutnparser import Tree
  3. class Visitor(object):
  4. def __init__(self, args):
  5. pass
  6. def dump(self):
  7. return ""
  8. def visit(self, tree):
  9. if not tree['head'].startswith("implicit_autogenerated_"):
  10. val = tree['head']
  11. visit_val = getattr(self, 'visit_' + val)
  12. return visit_val(tree)
  13. def visit_children(self, tree):
  14. for child in Tree.get_tail(tree):
  15. if child['head'].islower(): # visit only non-terminals
  16. self.visit(child)
  17. def set_type(self, tree, type):
  18. tree['type'] = type
  19. def get_type(self, tree):
  20. return tree.get('type', None)
  21. def set_symbol(self, tree, symbol):
  22. tree['symbol'] = symbol
  23. def get_symbol(self, tree):
  24. return tree.get('symbol', None)
  25. @staticmethod
  26. def print_tree(tree):
  27. from hutn_compiler.prettyprint_visitor import PrintVisitor
  28. pv = PrintVisitor()
  29. pv.visit(tree)
  30. print(pv.dump())
  31. # a visit_* method for each non-terminal in the grammar
  32. def visit_start(self, tree):
  33. pass
  34. # include-nodes are replaced before executing any visitor
  35. # def visit_include(self, tree):
  36. # pass
  37. def visit_vardecl(self, tree):
  38. pass
  39. def visit_assignment(self, tree):
  40. pass
  41. def visit_expression(self, tree):
  42. pass
  43. def visit_binary_operation(self, tree):
  44. pass
  45. def visit_disjunction(self, tree):
  46. pass
  47. def visit_conjunction(self, tree):
  48. pass
  49. def visit_comparison(self, tree):
  50. pass
  51. def visit_relation(self, tree):
  52. pass
  53. def visit_sum(self, tree):
  54. pass
  55. def visit_term(self, tree):
  56. pass
  57. def visit_factor(self, tree):
  58. pass
  59. def visit_logical_not(self, tree):
  60. pass
  61. def visit_invert_sign(self, tree):
  62. pass
  63. def visit_keep_sign(self, tree):
  64. pass
  65. def visit_primary(self, tree):
  66. pass
  67. def visit_parenthesized(self, tree):
  68. pass
  69. def visit_atomvalue(self, tree):
  70. pass
  71. def visit_type_specifier(self, tree):
  72. pass
  73. def visit_actionname(self, tree):
  74. pass
  75. def visit_string(self, tree):
  76. pass
  77. def visit_integer(self, tree):
  78. pass
  79. def visit_float(self, tree):
  80. pass
  81. def visit_rvalue(self, tree):
  82. pass
  83. def visit_lvalue(self, tree):
  84. pass
  85. def visit_func_call(self, tree):
  86. pass
  87. def visit_dictionary(self, tree):
  88. pass
  89. def visit_list(self, tree):
  90. pass
  91. def visit_dict_item(self, tree):
  92. pass
  93. def visit_ifelse(self, tree):
  94. pass
  95. def visit_while(self, tree):
  96. pass
  97. def visit_block(self, tree):
  98. pass
  99. def visit_func_body(self, tree):
  100. pass
  101. def visit_funcdecl(self, tree):
  102. pass
  103. def visit_func_type(self, tree):
  104. pass
  105. def visit_func_name(self, tree):
  106. pass
  107. def visit_void(self, tree):
  108. pass
  109. def visit_parameter(self, tree):
  110. pass
  111. def visit_return(self, tree):
  112. pass
  113. def visit_indent(self, tree):
  114. pass
  115. def visit_bool(self, tree):
  116. pass
  117. def visit_newline(self, tree):
  118. pass
  119. def visit_definition(self, tree):
  120. pass
  121. def visit_deref(self, tree):
  122. pass