Пример #1
0
	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)
Пример #2
0
	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)
Пример #3
0
    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        
Пример #4
0
    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
Пример #5
0
    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()