code: def splitted_rules(root):
      # type: (Nonterminal) -> Nonterminal
      
      items = Traversing.post_order(root)
      items = filter(lambda x: isinstance(x, SplitRule), items)
      for i in items:
          # create the original rule
          newRule = i.from_rule()
          # replace it with the node in the tree
          Manipulations.replace(i, newRule)
      return root
docs: Replace SplittedRules in the parsed tree with the original one.
      This method is mandatory if you insert Rule class with multiple rules into the grammar.
      :param root: Root of the parsed tree.
      :return: Modified tree.