コード例 #1
0
def limpioplusAutomata(arbolillo, automata):
    inicio = automataEsq.State(len(automata.states))
    automata.states.append(inicio)
    if arbolillo.left.data in OPERADORES:
        estado1, final1 = automataBuilder(arbolillo.left, automata)
    else:
        estado1, final1 = automata1(arbolillo.left, automata)
    final = automataEsq.State(len(automata.states))
    automata.states.append(final)
    inicio.transitions.append(automataEsq.Transition(EPSILON, estado1.id))
    final1.transitions.append(automataEsq.Transition(EPSILON, estado1.id))
    final1.transitions.append(automataEsq.Transition(EPSILON, final.id))
    return inicio, final
コード例 #2
0
def automata1(arbolillo, automata):
    signo = arbolillo.data
    primero = automataEsq.State(len(automata.states))
    automata.states.append(primero)
    segundo = automataEsq.State(len(automata.states))
    automata.states.append(segundo)
    primero.transitions.append(automataEsq.Transition(signo, segundo.id))
    return primero, segundo
コード例 #3
0
def questionAutomata(arbolillo, automata):
    inicio = automataEsq.State(len(automata.states))
    automata.states.append(inicio)
    temp = nfa.arbolillo(EPSILON)
    if arbolillo.left.data in OPERADORES:
        estado1, final1 = automataBuilder(arbolillo.left, automata)
    else:
        estado1, final1 = automata1(arbolillo.left, automata)
    if temp.data in OPERADORES:
        estado2, final2 = automataBuilder(temp, automata)
    else:
        estado2, final2 = automata1(temp, automata)
    final = automataEsq.State(len(automata.states))
    automata.states.append(final)

    inicio.transitions.append(automataEsq.Transition(EPSILON, estado1.id))
    inicio.transitions.append(automataEsq.Transition(EPSILON, estado2.id))
    final1.transitions.append(automataEsq.Transition(EPSILON, final.id))
    final2.transitions.append(automataEsq.Transition(EPSILON, final.id))

    return inicio, final
コード例 #4
0
def concatAutomata(arbolillo, automata):
    if arbolillo.left.data in OPERADORES:
        estado1, final1 = automataBuilder(arbolillo.left, automata)
    else:
        estado1, final1 = automata1(arbolillo.left, automata)

    if arbolillo.right.data in OPERADORES:
        estado2, final2 = automataBuilder(arbolillo.right, automata)
    else:
        estado2, final2 = automata1(arbolillo.right, automata)

    final1.transitions.append(automataEsq.Transition(EPSILON, estado2.id))
    return estado1, final2