def __init__(self, syntax, value=None, subtrees=None):
    """Initializer.

    Args:
      syntax: string representation of syntax
      value: string representation of actual value
      subtrees: list of tuple(edge_type, subtree nodes or single node)
    """
    self.syntax = syntax
    self.value = value

    self.children = []

    if subtrees is not None:
      for e_type, children in subtrees:
        if isinstance(children, list):
          for c in children:
            add_edge(parent_node=self, child_node=c, edge_type=e_type)
        else:
          add_edge(parent_node=self, child_node=children, edge_type=e_type)