Exemplo n.º 1
0
	def AFN_To_AFD (self):
		automata = AFD ()
		#Asignar el mismo alfabeto del AFN al AFD
		automata.Alfabeto = self.Alfabeto
		#Obtenemos el tamaño del alfabeto
		num_columnas = (len (self.Alfabeto) + 1)
		#Se crea una lista de estados si vacío
		estados_si = []
		#Calculamos la cerradura epsilon del estado inicial del AFN
		Si = self.Cerradura_Epsilon (self.Estado_Inicial)
		#Se agrega el conjunto de estados obtenido S0
		estados_si.append (Estados_Si (Si))
		
		#Agregamos la primera fila de la tabla
		fila = [-1] * num_columnas
		for c in automata.Alfabeto:
			fila [(list(automata.Alfabeto)).index (c)] = c
		fila [num_columnas - 1] = '¿Acept?'
		(automata.Tabla).append (fila)

		#Transiciones de la tabla
		for Si in estados_si:
			#Fila que se agregará a la tabla de transiciones
			fila = [-1] * num_columnas
			#Se recorre todo el alfabeto del automata
			for simbolo in automata.Alfabeto:
				#Conjunto de estados auxiliar con la operación Ir A
				aux = self.Ir_A (Si.Estados, simbolo)
				#Tokens de la tabla
				for estado in Si.Estados:
					if (estado.Estado_Aceptacion):
						fila [len (automata.Alfabeto)] = estado.Token
						break
				#Se verifica que el conjunto obtenido no sea vacío
				if (len (aux) == 0):
					continue
				else:
					#Verificamos si el conjunto obtenido ya existe
					existe = False
					for x in estados_si:
						#Si ya existe el conjunto de estados
						if (aux == x.Estados):
							existe = True
							fila [(list (automata.Alfabeto)).index (simbolo)] = x.id_estado
							break
					#Si el conjunto de estados no existe
					if (not existe):
						aux2 = Estados_Si (aux)
						estados_si.append (aux2)
						fila [(list (automata.Alfabeto)).index (simbolo)] = aux2.id_estado
			(automata.Tabla).append (fila)
		return automata
Exemplo n.º 2
0
def Convertir_AFN():
    os.system("cls")
    automata1 = int(
        input(
            '\n\n\nSelecciona el autómata que deseas convertir a AFD:\t')) - 1
    Automata = AFD()
    #Se convierte al automata AFN a un AFD
    Automata = (Automatas[automata1]).AFN_To_AFD()
    print('\n\nAlfabeto: ', Automata.Alfabeto)
    print('\n\nTabla de transiciones:\n\n')
    Automata.get_tabla()
    num_automata = int(
        input('\n\n¿En qué posición deseas guardar el autómata ' +
              posiciones() + ' ?\t')) - 1
    #Guardamos el automata creado en una de las n posiciones que se tienen
    Automatas[num_automata] = Automata
Exemplo n.º 3
0
	def analisis_lexico_2 (self):
		self.entrada_cadena.place_forget ()
		self.label_cadena.place_forget ()
		self.label_posicion.place_forget ()
		self.combo_posicion.place_forget ()
		self.boton_analisis_lexico_2.place_forget ()
		cadena = self.entrada_cadena.get ()
		posicion = self.combo_posicion.current ()
		correcto = 'Secuencia de tokens:'
		Automata = AFD ()
		Automata = (Automatas [posicion])
		Lex = Lexic (Automata, cadena)
		token = 1
		tokens = ''
		while (token != 0):
			token, lexema = Lex.get_token ()
			tokens = tokens + 'Token: ' + str (token) + '\t\tLexema: ' + str (lexema) + '\n'
		color_azul = '#214E77'
		color_gris = '#686B6D'
		fuente_botones = font.Font (family = 'Microsoft YaHei UI Light', size = 12, weight = 'bold')
		fuente_correcto = font.Font (family = 'Microsoft YaHei UI Light', size = 22, weight = 'bold')
		fuente_correcto2 = font.Font (family = 'Microsoft YaHei UI Light', size = 14, weight = 'bold')
		self.label_correcto = Label (self.ventana, text = correcto, font = fuente_correcto, fg = color_gris,
								bg = 'white')
		self.label_correcto.place (relx = 0.12, rely = 0.04)
		self.label_tokens = Label (self.ventana, text = tokens, font = fuente_correcto2, fg = color_gris,
								bg = 'white')
		self.label_tokens.place (relx = 0.2, rely = 0.15)
		self.boton_menu_principal = Button (self.ventana, text = 'Regresar al menu principal', font = fuente_botones,
								cursor = 'hand2', fg = color_azul, bg = 'white', bd=0, command=self.regresar_menu_principal_5)
		self.boton_menu_principal.place (relx = 0.26, rely = 0.85)
		self.boton_otra_cadena = Button (self.ventana, text = 'Validar otra cadena', font = fuente_botones,
								cursor = 'hand2', fg = color_azul, bg = 'white', bd=0, command = self.otro_analisis_lexico)
		self.boton_otra_cadena.place (relx = 0.32, rely = 0.92)
Exemplo n.º 4
0
def lectura(archivo, b):
    initialState = ""
    alpha = []
    states = []
    acceptStates = []
    transitions = []

    if path.isfile(archivo):
        file = open(archivo, "r")
        for line in file.readlines():
            data = line.replace('\n', "")
            if b == "a":
                array1 = data.split(";")
                array2 = array1[0].split(",")
                array3 = array1[1].split(",")

                if initialState == "":
                    initialState = array2[0]
                if array2[2] not in alpha:
                    alpha.append(array2[2])
                if array2[0] not in states:
                    states.append(array2[0])
                if array2[1] not in states:
                    states.append(array2[1])
                if array3[0] == "true":
                    if array2[0] not in acceptStates:
                        acceptStates.append(array2[0])
                if array3[1] == "true   ":
                    if array2[1] not in acceptStates:
                        acceptStates.append(array2[1])

                t = Transition(array2[0], array2[1], array2[2])
                transitions.append(t)

                afd = AFD(archivo, alpha, states, initialState, acceptStates,
                          transitions)
                print(afd.toString())
                if len(afd.mistakes) == 0:
                    AFDS.append(afd)
                else:
                    print(afd.mistakes)
            if b == "g":
                array1 = data.split(">")
        file.close()
    else:
        print("El archivo no existe.")
Exemplo n.º 5
0
def newAFD(nombre):
    nombre = nombre.strip()
    if datosDuplicados(nombre) == False:
        nuevoAFD = AFD(nombre, [], [], "", [], {}, [], [], [])
        listaAFD.append(nuevoAFD)
        return True
    else:
        alerta("Datos Duplicados")
        return False
Exemplo n.º 6
0
def prueba():
    op = 0
    while op != 7:
        print("*************************************************")
        print("*\t 1. Crear AFD \t\t\t\t*")
        print("*\t 2. Crear Gramatica     \t\t*")
        print("*\t 3. Evaluar Cadenas     \t\t*")
        print("*\t 4. Reportes \t\t\t\t*")
        print("*\t 5. Cargar Archivo de Entrada   \t*")
        print("*\t 6. Gramatica Tipo2 y AP\t*")
        print("*\t 7. Salir \t\t\t\t*")
        print("*************************************************")
        op = str(input("Elige una opcion:\n"))

        if op == '1':
            os.system("cls")
            AFD.pedirnombre()
            break
        elif op == '2':
            os.system("cls")
            gramatica.pedirnombre()
            break
        elif op == '3':
            os.system("cls")
            gramatica.valinombre()
            break
        elif op == '4':
            os.system("cls")
            reporte.menu()
            break
        elif op == '5':
            os.system("cls")
            Archivo.menuarchivo()
            break
        elif op == '6':
            os.system("cls")
            tip.pedirnombre()
            break
        elif op == '7':

            sys.exit()

            break
Exemplo n.º 7
0
def scanner(keywords, token, kt, chars):
    print("scanning")
    key.append(keywords)
    try:
        if len(kt) != 0:
            try:
                for i in range(len(kt)):
                    print("entro")
                    infn, ress = AFD(kt[i])
                    outK.append([ress, infn])
                    print("paso")
            except:
                pass
    except:
        pass
    if len(token) != 0:
        for i in range(len(token)):
            infn, ress = AFD(token[i])
            out.append([ress, infn])
    textoA = "C:/Users/lcest/Desktop/Proyecto2Final/ari.txt"
    print("paso")
    doc = reads(textoA)
    eval(doc)
Exemplo n.º 8
0
    def __init__(self, speed, name):
        self.name = name;
        self.speed      = speed;
        self.direction  = "";
        self.sprite     = "images/" + name + "_r1.png";
        self.set_surface();
        self.rect       = self.surface.get_rect();

        self.upAnim     = ["images/" + name + "_u1.png", "images/" + name + "_u2.png"];
        self.downAnim   = ["images/" + name + "_d1.png", "images/" + name + "_d2.png"];
        self.leftAnim   = ["images/" + name + "_l1.png", "images/" + name + "_l2.png"];
        self.rightAnim  = ["images/" + name + "_r1.png", "images/" + name + "_r2.png"];
        self.animFrame  = 0;

        self.blocked    = "";

        # Automato que define o movimento do objeto:
        self.automato     = AFD();
        self.currentState = None; 
Exemplo n.º 9
0
	def convertir_AFN_2 (self):
		self.label_posicion.place_forget ()
		self.combo_posicion.place_forget ()
		self.boton_convertir_AFN_2.place_forget ()
		posicion = self.combo_posicion.current ()
		correcto = 'AFN convertido correctamente'
		Automata = AFD ()
		Automata = (Automatas [posicion]).AFN_To_AFD ()
		Automatas [posicion] = Automata
		color_azul = '#214E77'
		color_gris = '#686B6D'
		fuente_botones = font.Font (family = 'Microsoft YaHei UI Light', size = 12, weight = 'bold')
		fuente_correcto = font.Font (family = 'Microsoft YaHei UI Light', size = 22, weight = 'bold')
		posicion_y = 120
		posicion_x = 60
		self.label_correcto = Label (self.ventana, text = correcto, font = fuente_correcto, fg = color_gris, bg = 'white')
		self.label_correcto.place (x = posicion_x - 30, y = posicion_y)
		self.boton_menu_principal = Button (self.ventana, text = 'Regresar al menu principal', font = fuente_botones,
								cursor = 'hand2', fg = color_azul, bg = 'white', bd=0, command=self.regresar_menu_principal_4)
		self.boton_menu_principal.place (relx = 0.25, rely = 0.35)
		self.boton_convertir_otro_AFN = Button (self.ventana, text = 'Convertir otro autómata', font = fuente_botones,
								cursor = 'hand2', fg = color_azul, bg = 'white', bd=0, command = self.convertir_otro_AFN)
		self.boton_convertir_otro_AFN.place (relx = 0.28, rely = 0.45)
Exemplo n.º 10
0
def menuAFD():
    states = []
    alphabet = []
    initialState = ""
    acceptStates = []
    transitions = []
    os.system('cls')
    z = True
    y = input("Ingrese el nombre del AFD a crear: ")
    print(y)
    while z:
        print("")
        print("1. Ingresar estados")
        print("2. Ingresar alfabeto")
        print("3. Estado Inicial")
        print("4. Estados de aceptación")
        print("5. Ingresar transiciones")
        print("6. Ayuda")
        print("7. Generar AFD y gramatica")
        print("8. Regresar")
        print("9. Imprimir todos los AFDS")
        x = input("Ingrese la opción que desea escoger: ")
        if x == "1":
            os.system('cls')
            states.clear()
            i = True
            while i:
                state = input(
                    "Ingrese el estado nuevo, ***para dejar de ingresar estados presiones la tecla '/' seguida de enter*** "
                )
                if state == "/":
                    os.system('cls')
                    print(states)
                    i = False
                else:
                    states.append(state)
        elif x == "2":
            os.system('cls')
            alphabet.clear()
            i = True
            while i:
                symbol = input(
                    "Ingrese el símbolo nuevo, **para dejar de ingresar símbolos presiones la tecla '/' seguida de enter** "
                )
                if symbol == "/":
                    os.system('cls')
                    print(alphabet)
                    i = False
                else:
                    alphabet.append(symbol)
        elif x == "3":
            print("")
            i = input("Ingrese el estado inicial: ")
            initialState = i
            print(i)
        elif x == "4":
            os.system('cls')
            i = True
            acceptStates.clear()
            while i:
                accept = input(
                    "Ingrese los estados de aceptacion uno por uno, ***para dejar de ingresar estados de aceptación presiones la tecla '/' seguida de enter***: "
                )
                if accept == "/":
                    os.system('cls')
                    print(acceptStates)
                    i = False
                else:
                    acceptStates.append(accept)
        elif x == "5":
            transitions.clear()
            print("1. Modo 1")
            print("2. Modo 2")
            i = input("Ingrese el modo para ingresar sus transiciones: ")
            if i == "1":
                os.system('cls')
                i = True
                while i:
                    transition = input(
                        "Ingrese las trasiciones *para dejar de ingresar transiciones presiones la tecla '/' seguida de enter* "
                    )
                    if transition == "/":
                        os.system('cls')
                        i = False
                    else:
                        arrayOne = []
                        arrayOne = transition.split(";")
                        arrayTwo = []
                        arrayTwo = arrayOne[0].split(",")
                        arrayTwo.append(arrayOne[1])
                        if arrayTwo[2] == "epsilon":
                            print(
                                "Error no pueden haber transiciones con epsilon en un AFD solo en un AFN"
                            )
                        else:
                            transition = Transition(arrayTwo[0], arrayTwo[1],
                                                    arrayTwo[2])
                            transitions.append(transition)
                            for t in transitions:
                                print(t.toString())
            elif i == "2":
                terminals = input("Ingrese los terminales del AFD: ")
                terminals = terminals.replace("[", "")
                terminals = terminals.replace("]", "")
                NT = input("Ingrese los no terminales del AFD: ")
                NT = NT.replace("[", "")
                NT = NT.replace("]", "")
                SD = input("Ingrse los simbolos destino del AFD")
                SD = SD.replace("[", "")
                SD = SD.replace("]", "")
                print(terminals, " ", NT, " ", SD)
                terminales = terminals.split(",")
                non_terminals = NT.split(",")
                i = True
                while i:
                    i = input(
                        "Presione '/' seguido de enter para regresar al menu anterior y completar el AFD"
                    )
                    if i == "/":
                        i = False
            else:
                print(
                    "*************La opción que elegiste no existe**************"
                )
        elif x == "6":
            os.system('cls')
            print("")
            print("**********DATOS DEL CURSO********")
            print("")
            print("Curso: Lenguajes Formales de Programación")
            print("Sección: B+")
            print("Auxiliar: Jose Veliz")
            print("Digito: 4")
        elif x == "7":
            afd = AFD(y, alphabet, states, initialState, acceptStates,
                      transitions)
            if len(afd.mistakes) > 0:
                for m in afd.mistakes:
                    print(m)
            else:
                print(afd.toString())
                AFDS.append(afd)
        elif x == "8":
            z = False
        elif x == "9":
            for afd in AFDS:
                print(afd.toString())
        else:
            print("")
            print("********La opcion que elegiste no existe************")
Exemplo n.º 11
0
# SI LA CADENA ESTA BIEN SIGUE SINO SE ACABA EL PROGRAMA
if (contar(r)):
    pass
else:
    print("Expresion no valida")
    print("Adios")
    sys.exit()

# ALTERACIONES AL REGEX
rAFD = r
r = arreglar1(r)
r = arreglar2(r)

# INICIALIZACION DE CLASES
clase = thompson.Automata()
claseAFD = AFD.AutomataFD()

# LECTURA DE REGEX BASADO EN El ARTIMETIC EXPRESSION EVALUATION DE GEEKS FOR GEEKS
values = []
ops = []
i = 0
nodos = []
while i < len(r):
    if r[i] == '(':
        ops.append(r[i])
    elif r[i].isalpha() or r[i].isdigit():
        values.append(r[i])
    elif r[i] == ')':
        while len(ops) != 0 and ops[-1] != '(':
            op = ops.pop()
            if op != '*':
Exemplo n.º 12
0
 def __init__(self, AFN):
     self.lista = list()
     self.AFN = AFN
     self.AFD = AFD()
     self.etiqueta = 'A'
Exemplo n.º 13
0
class Transformacion:
    def __init__(self, AFN):
        self.lista = list()
        self.AFN = AFN
        self.AFD = AFD()
        self.etiqueta = 'A'

    def convertir_automata(self):
        self.AFD.alfabeto = self.AFN.alfabeto
        self.AFD.alfabeto.remove('E')
        estado = self.cerradura_epsilon(self.AFN.estado_inicial)
        actual = Subconjunto(estado, self.etiqueta)
        self.lista.append(actual)
        pendientes = list()
        pendientes.append(actual)
        agregar = True
        self.etiqueta = chr(ord(self.etiqueta) + 1)
        nuevo = None
        while len(pendientes) > 0:
            actual = pendientes.pop()
            for simbolo in self.AFD.alfabeto:
                estados = self.cerradura_epsilon(
                    self.mover(actual.estados, simbolo))
                agregar = True
                for i in self.lista:
                    if i.estados == estados:
                        agregar = False
                        nuevo = i
                        break
                if agregar:
                    nuevo = Subconjunto(estados, self.etiqueta)
                    pendientes.append(nuevo)
                    self.lista.append(nuevo)
                    self.etiqueta = chr(ord(self.etiqueta) + 1)
                self.AFD.agregar_transicion(actual.etiqueta, nuevo.etiqueta,
                                            simbolo)

        # Obtenemos los estados finales e inicial
        for elemento in self.lista:
            if self.AFN.estado_inicial in elemento.estados:
                self.AFD.estado_inicial = elemento.etiqueta
            for final in self.AFN.estados_finales:
                if final in elemento.estados:
                    self.AFD.estados_finales.add(elemento.etiqueta)

    # Operacion cerradura_epsilon
    def cerradura_epsilon(self, pila_estados):
        estados_epsilon = set()
        aux = list()
        if type(pila_estados) is set:
            aux.extend(pila_estados)
        else:
            aux.append(pila_estados)
        for estado_actual in aux:
            for t in self.AFN.transiciones:
                if t.caracter == 'e' and t.actual == estado_actual and (
                        t.siguiente not in aux):
                    aux.append(t.siguiente)

        estados_epsilon.update(aux)
        return estados_epsilon

    # Operacion Mover
    def mover(self, estados, simbolo):
        estados_aux = set()
        for estado in estados:
            for transicion in self.AFN.transiciones:
                if simbolo != 'e' and estado == transicion.actual and transicion.caracter == simbolo:
                    estados_aux.add(transicion.siguiente)
        return estados_aux
Exemplo n.º 14
0
class Main:

    print()
    print("Escriba el nombre del archivo de texto, finalizando sin la extensión .txt:")
    entrada = input()
    arch = LecturaArchivo(entrada+".txt")
    lectura = arch.LeerArchivo()
    if lectura[0][0] == '#!dfa':
        autoAFD = AFD(lectura)
        print()
        print("Menu AFD:")
        print("1. Procesar Cadena")
        print("2. Procesar Cadena con Detalle")
        print("3. Graficar Automata")
        print("4. Hallar Complemento")
        print("Ingrese el numero de la opción deseada del menu:")
        opcion = input()
        if opcion == "1":
            print("Ingrese la cadena que desea procesar:")
            cad = input()
            if (autoAFD.procesarCadena(cad, "proceCad")) == True:
                print("|La cadena ES aceptada por el automata|")
            else:
                print("|La cadena NO ES aceptada por el automata|")
        elif opcion == "2":
            print("Ingrese la cadena que desea procesar:")
            cad = input()
            print(autoAFD.procesarCadenaConDetalles(cad))
        elif opcion == "3":
            autoAFD.graficarAutomata()
        elif opcion == "4":
            autoAFD.hallarComplemento()
        elif opcion == "5":
            autoAFD.minimizarAutomata()
        else:
            print("¡No ingresó una opcion válida!")

    elif lectura[0][0] == '#!nfa':
        autoAFN = AFN(lectura)
        print()
        print("Menu AFN:")
        print("1. Procesar Cadena")
        print("2. Graficar Automata")
        print("3. Convertir AFN a AFD")
        print("Ingrese el numero de la opción deseada del menu:")
        opcion = input()
        if opcion == "1":
            print("Ingrese la cadena que desea procesar:")
            cad = input()
            if (autoAFN.procesarCadena(cad,"procesarCadena")) == True:
                print("|La cadena ES aceptada por el automata|")
            else:
                print("|La cadena NO ES aceptada por el automata|")
        elif opcion == "2":
            autoAFN.graficarAutomata()
        elif opcion == "3":
            autoAFN.imprimirConversionArchivoTexto()
            archi = LecturaArchivo("ConversionAFNtoAFD.txt")
            lect = archi.LeerArchivo()
            autoAFN.graficarConversionToAFD(lect)
        else:
            print("¡No ingresó una opcion válida!")
 def __init__(self, afnd):
     self.afnd = afnd
     self.afd = AFD.Automato()
     self.afd.set_alfabeto(self.afnd.alfabeto)
     self.conversao()
Exemplo n.º 16
0
# todos los estados deben ser accesibles
# automata completo con estados limbo
# documentacion
# para lambda usar simbolo $
#archivo de especificacion de formato revisar
# import AFD
# import string
# prueba
import AFD
import ProcesamientoCadenaAFD
a = AFD.AFD("fileAFD.txt")

# b = ProcesamientoCadenaAFD.ProcesamientoCadenaAFD()









Exemplo n.º 17
0
def main():
    os.system('cls')
    print('Ingrese nombre del AFD: ', end='')
    nombreAFD = input()
    automata = AFD.AFD()
    if listaAFD.get(nombreAFD) == None and nombreAFD != '':
        listaAFD[nombreAFD] = automata
        while True:
            os.system('cls')
            print('1. Ingresar estados')
            print('2. Ingresar alfabeto')
            print('3. Ingresar estado inicial')
            print('4. Ingresar estados de aceptación')
            print('5. Ingrese transicion')
            print('6. Ayuda')
            print('7. Salir')
            print()
            entrada = input()
            if entrada == '1':
                os.system('cls')
                print('Ingrese estado: ', end='')
                estado = input()
                if estado not in Le:
                    if automata.agregarEstado(estado):
                        print('Se agrego con exito el estado')
                    else:
                        print('Error al ingresar estado')
                else:
                    print('Error al ingresar estado')
            elif entrada == '2':
                os.system('cls')
                print('Ingrese alfabeto: ', end='')
                alfabeto = input()
                if alfabeto not in Le:
                    if automata.agregarAlfabeto(alfabeto):
                        print('Se agrego con exito el alfabeto')
                    else:
                        print('Error al ingresar alfabeto')
                else:
                    print('Error al ingresar alfabeto')

            elif entrada == '3':
                os.system('cls')
                print('Ingrese estado inicial: ', end='')
                estado_inicial = input()
                if automata.agregarEstadoInicial(estado_inicial):
                    print('Se agrego correctamente el estado inicial')
                else:
                    print('Error al agregar estado inicial')
            elif entrada == '4':
                os.system('cls')
                print('Ingrese estado de aceptación: ', end='')
                estado_aceptacion = input()
                if automata.agregarEstadosAceptacionn(estado_aceptacion):
                    print('Se agrego correctamente el estado de aceptacion')
                else:
                    print('Error al ingreso estado de aceptacion')
            elif entrada == '5':
                os.system('cls')
                print('1. Modo 1\n2. Modo 2')
                modo = input()
                if modo == '1':
                    os.system('cls')
                    print('Ingrese cadena: ', end='')
                    cadena = input()
                    if automata.modo1(cadena):
                        print('Se agrego correctamente la transición')
                    else:
                        print('Cadena invalida')
                elif modo == '2':
                    os.system('cls')
                    print('Ingrese cadena para la columna: ', end='')
                    colunma = input()
                    print('Ingrese cadena para la fila: ', end='')
                    fila = input()
                    print('Ingrese cadena para el destino: ', end='')
                    destino = input()
                    if automata.modo2(colunma, fila, destino):
                        print('Se agrego correcta la transicion')
                    else:
                        print('Error cadena invalida')
            elif entrada == '6':
                os.system('cls')
                print('Lenguajes Fomrales')
                print('Sección: B+')
                print('Carné: 201800586\n')
                print(automata.toString())
                print('Modo 1: ', ' '.join(automata.getTransicionModo1()))
                print('Modo 2: ', ' '.join(automata.getTransicionModo2()))
            elif entrada == '7':
                break
            input()
    else:
        print('Error nombre de AFD')
        input()
Exemplo n.º 18
0
                                                simbolo)
        for key,val in self.Destados.items():
            if self.afn.inicial in val[:-1]:
                self.afd.establecer_inicial(key)
            for item in self.afn.finales:
                if item in val[:-1]:
                    self.afd.establecer_final(key)
        
                    
    def checar_marcados(self):
        marcados = True
        for key, val in self.Destados.items():
             if val[-1] == False:
                 marcados = False
        return marcados

    def obtener_afd(self):
        return self.afd
            
if __name__ == "__main__":
    autn = AFN.AFN()
    autn.cargar_desde("afn.afn")
    autn.cargar_transiciones()
    autn.obtener_inicial()
    autn.obtener_finales()
    autn.obtener_alfabeto()
    subconjuntos = Subconjuntos(autn)
    subconjuntos.construir_subconjuntos()
    autd = AFD.AFD()
    autd = subconjuntos.obtener_afd()
    autd.guardar_en("afd")
Exemplo n.º 19
0
#            Primeiro Trabalho de LFA
# Arthur Alexsander Martins Teodoro - 0022427
# Saulo Ricardo Dias Fernandes - 0021581
# Data: 05/05/2017

from AFD import *

automata1 = AFD()
automata1.load("minimizacaoProva.jff")
print "Estados equivalentes:"
print automata1.equivalentsStates()
automata1Min = automata1.minimum()
automata1Min.save("automatoProvaMinimizado.jff")

if AFD.equivalents(automata1, automata1Min):
    print "Os automatos sao equivalentes"
else:
    print "Os automatos nao sao equivalentes"

#quantidade par de a's
automata2 = AFD()
automata2.addState(0, True, True)
automata2.addState(1)
automata2.addTransition(0, 1, "a")
automata2.addTransition(1, 0, "a")
automata2.addTransition(0, 0, "b")
automata2.addTransition(1, 1, "b")

#quantidade impar de b's
automata3 = AFD()
automata3.addState(0, initial=True)
Exemplo n.º 20
0
 def __init__(self, afn):
     self.Destados = {}
     self.afn = afn
     self.afd = AFD.AFD()
Exemplo n.º 21
0
def StartAFD(E, Q, F, Q0, QF):
    C = entry.get()
    AFD.adf_start(E, Q, F, Q0, QF, C)
    AFDresultsGUI.GUIstart(C)
Exemplo n.º 22
0
def AFDf():
    AFD.main()