def get_nfa(self, idgenerator): left = self.childs[0] right = self.childs[1] left_nfa = left.get_nfa(idgenerator) right_nfa = right.get_nfa(idgenerator) start, accept = idgenerator.nextID(), idgenerator.nextID() root_nfa = NFA().startState(start).acceptState(accept) root_nfa.append([left_nfa, right_nfa]) for sub_nfa in [left_nfa, right_nfa]: root_nfa.addTransitions(start, EPSILON, sub_nfa.start) root_nfa.addTransitions(sub_nfa.accept, EPSILON, accept) return root_nfa