Ejemplo n.º 1
0
def carregaGramatica(nomeArq):
    gramatica = Gramatica()

    escreve_terminais = 0
    escreve_variaveis = 0
    escreve_regras = 0
    escreve_inicial = 0

    with open(nomeArq) as arq:
        for dado in arq:

            matchT = re.match(r'#Terminais',dado, re.I|re.M)
            if matchT:
                escreve_terminais = 1
                escreve_regras = 0
                escreve_variaveis = 0
                escreve_inicial = 0
            matchV = re.match(r'#Variaveis',dado, re.I|re.M)
            if matchV:
                escreve_terminais = 0
                escreve_regras = 0
                escreve_variaveis = 1
                escreve_inicial = 0
            matchR = re.match(r'#Regras', dado, re.I|re.M)
            if matchR:
                escreve_terminais =0
                escreve_regras=1
                escreve_variaveis=0
                escreve_inicial = 0
            matchI = re.match(r'#Inicial', dado, re.I|re.M)
            if matchI:
                escreve_terminais =0
                escreve_regras=0
                escreve_variaveis=0
                escreve_inicial = 1

            if escreve_terminais :
               matchObj  = re.match(r'\[ (\w) \]', dado, re.I|re.M)
               if matchObj:
                gramatica.adicionaTerminais(matchObj.group(1).strip())

            if escreve_variaveis :
                matchObj = re.match(r'\[ (\w) \]', dado, re.I | re.M)
                if matchObj:
                    gramatica.adicionaVariavel(matchObj.group(1).strip())

            if escreve_regras :
                matchObj = re.findall(r'\[ (\w) \]', dado, re.I | re.M)
                if matchObj:
                    gramatica.adicionaRegra(matchObj[0], "".join(matchObj[1:]).strip())

            if escreve_inicial :
                matchObj = re.match(r'\[ (\w) \]', dado, re.I | re.M)
                if matchObj:
                    gramatica.defineInicial(matchObj.group(1).strip())


            #print(dado)

    return gramatica
def newGramatica(name):
    name = name.strip()
    if duplicateData(name) == False:
        newGrammar = Gramatica(name, [], [], "", {}, [], [], [], [], [])
        listaGramatica.append(newGrammar)
        return True
    else:
        alerta("Datos Duplicados")
        return False
Ejemplo n.º 3
0
def verificar_extension_gramatica(ruta):
    nombre, extension = os.path.split(ruta)
    extension = extension.split(".")
    global nueva_gramatica
    if extension[1] == "grm":
        nueva_gramatica = Gramatica.Gramatica(extension[0])
        return True
    else:
        return False
Ejemplo n.º 4
0
    def analizar(self):
        analisisValido = self._G()

        if analisisValido:
            # Se verifica que todos los caracteres de la cadena hayan sido analizados
            if self._lexico.getToken() != 0:
                analisisValido = False
                self._gramatica = Gramatica()

        return analisisValido
Ejemplo n.º 5
0
 def cargarGram(self):
     f = filedialog.askopenfilename(defaultextension='.txt',
                                    initialdir=DEFAULTDIR)
     if not len(f):
         return
     self.G = Gramatica.Gramatica(f, self.gramType.get())
     if self.G.errorAlCrear != False:
         messagebox.showinfo(
             "Error al crear la gramatica",
             "La gramatica no se puedo crear porque" + self.G.errorAlCrear)
         self.G = None
         return
     self.btnAnalizar.config(state='normal')
     self.lblinfoGram.config(text=str(self.G))
def convertir_afd_gramatica():
    nueva_gramatica = Gramatica.Gramatica(automata.nombre)
    nueva_gramatica.agregar_terminales("epsilon")
    for aux in automata.alfabeto:
        nueva_gramatica.agregar_terminales(aux)
    for aux1 in automata.estados:
        nueva_gramatica.agregar_no_terminales(aux1.nombre)
    nueva_gramatica.determinar_no_terminal_inicial(automata.estado_inicial)
    for aux2 in automata.estado_aceptacion:
        for aux3 in nueva_gramatica.listaNoTerminales:
            if aux2 == aux3.no_terminal:
                nueva_gramatica.definir_produccion(aux3.no_terminal, "epsilon")
    for aux4 in automata.estados:
        for aux5 in nueva_gramatica.listaNoTerminales:
            if aux4.nombre == aux5.no_terminal:
                for aux6 in aux4.lista_transiciones:
                    produccion = aux6.simbolo + " " + aux6.estadoDestino
                    aux5.agregar_produccion(produccion)
    return nueva_gramatica
Ejemplo n.º 7
0
    def __init__(self, lexico):
        self._lexico = lexico

        self._ladoIzquierdoActual = ''

        self._gramatica = Gramatica()
Ejemplo n.º 8
0
def Mostrar(matriz,noTerminales):
	i = 0
	for fila in matriz:
		print(noTerminales[i], end=" ")
		i = i + 1
		for valor in fila:
			print("\t", valor, end=" ")
		print()


# Ejemplos de gramaticas 
producciones = "A->aAb,A->Bbc,B->cb"
#producciones = "S->E,S->sAP,P->pASQ,Q->SS,Q->qPs,P->q,A->a"
#producciones = " S->QP,P->+QP|-QP|E,Q->TA,A->*TA|/TA|E,T->(S)|a|b"

gramatica = Gr.Gramatica(producciones)
noTerminales = gramatica.getNoTerminal()
print("No terminales: ")
print(noTerminales)
primeros = []
siguientes = []
print("Producciones: ")
for i in gramatica.getProducciones():
		print(i)

print("Conjunto primeros: ")
for i in range(len(noTerminales)):
    primeros.append(Pr.Primero(gramatica,noTerminales[i]))
    print(noTerminales[i] + " = {" + str(primeros[i].getConjuntosPrimeros()) + "}")

print("Conjunto siguientes: ")
Ejemplo n.º 9
0
def menu_principal():
    os.system("cls")
    global nombreGramatica
    nombreGramatica = input("Ingrese el nombre de la Gramatica: ")
    if verificar_gramatica_existente(nombreGramatica):
        global gramatica
        gramatica = obtener_gramatica_existente(nombreGramatica)
    else:
        gramatica = Gramatica.Gramatica(nombreGramatica)
        listaGramaticas.append(gramatica)
    os.system("cls")
    opcion = 0
    while opcion != 6:
        os.system("cls")
        print("----------Menu de Gramaticas----------")
        print("1) INGRESAR NO TERMINALES")
        print("2) INGRESAR TERMINALES")
        print("3) DEFINIR NO TERMINAL INICIAL")
        print("4) DEFINIR PRODUCCIONES")
        print("5) AYUDA")
        print("6) SALIR")
        try:
            opcion = int(input("Seleccione una opcion: "))
        except ValueError as e:
            print()
        if opcion == 1:
            seleccion = 0
            while seleccion != 2:
                os.system("cls")
                print("----------Ingresar No Terminales----------")
                print("1) INGRESAR NUEVO NO TERMINAL")
                print("2) SALIR")
                try:
                    seleccion = int(input("Seleccione una opcion: "))
                except:
                    print()
                if seleccion == 1:
                    no_terminal = input("Ingrese el no terminal: ")
                    agregar_no_terminales(no_terminal)
                elif seleccion == 2:
                    break
                else:
                    input("Opcion incorrecta, presione enter...")
        elif opcion == 2:
            seleccion = 0
            while seleccion != 2:
                os.system("cls")
                print("----------Ingresar Terminales----------")
                print("1) INGRESAR NUEVO TERMINAL")
                print("2) SALIR")
                try:
                    seleccion = int(input("Seleccione una opcion: "))
                except:
                    print()
                if seleccion == 1:
                    terminal = input("Ingrese el terminal: ")
                    agregar_terminales(terminal)
                elif seleccion == 2:
                    break
                else:
                    input("Opcion incorrecta, presione enter...")
        elif opcion == 3:
            os.system("cls")
            print("----------Definir No Terminal Inicial----------")
            no_terminal = input("Ingrese el no terminal desea como inicial: ")
            definir_no_terminal_inicial(no_terminal)
        elif opcion == 4:
            seleccion = 0
            while seleccion != 2:
                os.system("cls")
                print("----------Definir Producciones----------")
                print("1) INGRESAR NUEVA PRODUCCION")
                print("2) SALIR")
                try:
                    seleccion = int(input("Seleccione una opcion: "))
                except:
                    print()
                if seleccion == 1:
                    cadena = input("Ingrese la produccion: ")
                    definir_producciones(cadena)
                elif seleccion == 2:
                    break
                else:
                    input("Opcion incorrecta, presione enter...")
        elif opcion == 5:
            os.system("cls")
            print("Lenguajes Formales y de Programacion Seccion A")
            print("Auxiliar: Elmer Real")
            print("4")
            input("Presione enter")
        elif opcion == 6:
            break
        else:
            input("Opcion incorrecta, presione enter")