Exemplo n.º 1
0
    def get_nfa(self, idgenerator):
        start = idgenerator.nextID()
        nfa_v = NFA().startState(start)

        cur_state = nfa_v.start
        for c in self.childs:
            if isinstance(c, Primitive):
                next_state = idgenerator.nextID()
                nfa_v.addTransitions(cur_state, c.text(), next_state)
                cur_state = next_state

            else:
                sub_nfa = c.get_nfa(idgenerator)
                nfa_v.addTransitions(cur_state, EPSILON, sub_nfa.start)
                cur_state = sub_nfa.accept
                nfa_v.addSingle(sub_nfa)

        nfa_v.acceptState(cur_state)
        return nfa_v