Exemplo n.º 1
0
    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