def automato_para_gramatica(self): a = self.criar_automato() g = Gramatica() lines = g.transformar_gramatica(a) self.textEdit.clear() for line in lines: self.textEdit.append(line)
def gramatica_para_automato(self): text = self.textEdit.toPlainText().toAscii() text = str(text).splitlines() g = Gramatica() for line in text: g.inserir_producao(str(line)) a = g.transformar_automato() a.imprimir() self.automato_para_tabela(a)
def pasar_lista_a_gramatica(self, lista_gramatica): producciones = self.__obtener_producciones(lista_gramatica) no_terminales = self.__obtener_no_terminales(producciones) terminales = self.__obtener_terminales(producciones) gramatica = Gramatica() gramatica.asignar_produciones(producciones) gramatica.asignar_no_terminales(no_terminales) gramatica.asignar_terminales(terminales) return gramatica
t4 = Terminal(")") t5 = Terminal("id") p0 = [[v2, v1]] p1 = [[t0, v2, v1], [t1]] p2 = [[v4, v3]] p3 = [[t2, v4, v3], [t1]] p4 = [[t3, v0, t4], [t5]] v0.atribuirProducao(p0) v1.atribuirProducao(p1) v2.atribuirProducao(p2) v3.atribuirProducao(p3) v4.atribuirProducao(p4) gramatica = Gramatica() gramatica.addVariavel(v0) gramatica.addVariavel(v1) gramatica.addVariavel(v2) gramatica.addVariavel(v3) gramatica.addVariavel(v4) gramatica.encontrarFirsts() for i in gramatica.getListaProducoes(): print(i.simbolo) for j in i.firsts: print(j.simbolo) print("\n") pass
def Leer_archivo(nombre_archivo): archivo = open(nombre_archivo, mode="r", encoding="utf-8") posicion = 0 producciones = [] for line in archivo.readlines(): valor = str(line) valor = valor.rstrip().lstrip( ) # Le quitamos los espacios al final y al inicio # al valor porque sin esto no nos reconoce el * if valor != "*": if posicion == 0: nombre = valor elif posicion == 1: listas = valor.split(";") #Extrayendo datos cadena = listas[0] no_terminales = [] for i in range(len(cadena)): if cadena[i] != ",": no_terminales.append(cadena[i]) cadena = listas[1] terminales = [] for i in range(len(cadena)): if cadena[i] != ",": terminales.append(cadena[i]) s_inicial = listas[2] else: produccion = valor.split("->") derecho = str(produccion[0]).rstrip().lstrip() izq = str(produccion[1]).rstrip().lstrip() izquierdo = [] for q in range(len(izq)): if izq[q] != " ": izquierdo.append(izq[q]) if len(producciones) == 0: nuevo = Produccion(derecho, [izquierdo]) producciones.append(nuevo) else: es_nuevo = True for i in range(len(producciones)): if derecho == producciones[i].getSimbolo(): producciones[i].producciones.append(izquierdo) es_nuevo = False break if es_nuevo: nuevo = Produccion(derecho, [izquierdo]) producciones.append(nuevo) posicion += 1 else: for j in range(len(producciones)): p = producciones[j] g = p.getProducciones() nuevo = Gramatica(nombre, no_terminales, terminales, s_inicial, producciones) Gramaticas_Leidas.append(nuevo) posicion = 0 producciones = [] archivo.close()