def parse_tree(tree_string): root = Selector(name="Root") #Current node has the current selector or sequence that we are processing current_node = root for char in tree_string[1,-1]: if char == "-": #Selector new_node = Selector(name="Selector") new_node.parent = current_node current_node.child_nodes.append(new_node) elif char == "_": #Sequence new_node = Selector(name="Sequence") new_node.parent = current_node current_node.child_nodes.append(new_node) elif char == "[": #Start children current_node = current_node.child_nodes[-1] elif char == "]": #End children current_node = current_node.parent_node elif char.isupper(): #Check new_node = Check(node_dict(char)) new_node.parent_node = current_node current_node.child_nodes.append(new_node) elif char.islower(): #Action new_node = Action(node_dict(char)) new_node.parent_node = current_node current_node.child_nodes.append(new_node) return root