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

        if self.isChildSimpleOrAST():
            ## convert simple orAst "0|1" to  0,1
            symbol = self.child.__repr__().replace("|", ",")
            root_nfa.addTransitions(start, symbol, accept)
        elif isinstance(self.child, Primitive):
            root_nfa.addTransitions(start, self.child.text(), start)
        else:
            sub_nfa = self.child.get_nfa(idgenerator)

            root_nfa.addSingle(sub_nfa)
            root_nfa.addTransitions(start, EPSILON, sub_nfa.start)
            root_nfa.addTransitions(sub_nfa.accept, EPSILON, accept)

        return root_nfa
Exemplo n.º 2
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