Esempio 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
Esempio n. 2
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
Esempio n. 3
0
    def Traducir_Alto_nivel(self):
        global traducir
        try:
            self.consola.clear()
            #self.tabla_cuadruplos.clear()
            tab = self.editor.widget(self.editor.currentIndex())
            items = tab.children()
            codigo = items[0].text()
            ast = Gramatica.parse(codigo)
            lst_errores = Gramatica.lst_errores
            errores = GraficarError(args=(lst_errores, "Errores"), daemon=True)
            errores.start()
            gda = GramaticaGDA.parse(codigo)
            nodo = GramaticaM.parse(codigo)
            g_ast = GraficarArbol(args=(nodo, "AST"), daemon=True)
            g_ast.start()
            g_gda = GraficarGDA(args=(gda, "GDA"), daemon=True)
            g_gda.start()

            self.codigo_3d.clear()
            self.codigo_3d_optimizado.clear()
            traducir = Traducir(
                args=(ast, self.tabla_cuadruplos, self.codigo_3d, self.consola,
                      self.tabla_simbolos, self.codigo_3d_optimizado),
                daemon=True)
            traducir.start()
        except:
            print("ERROR EN EJECUCION NORMAL")
Esempio n. 4
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
def newGramatica(name):
    name = name.strip()
    if duplicateData(name) == False:
        newGrammar = Gramatica(name, [], [], "", {}, [], [], [], [], [])
        listaGramatica.append(newGrammar)
        return True
    else:
        alerta("Datos Duplicados")
        return False
Esempio n. 6
0
def EjecutarASC(input):
    instrucciones = g.parse(input)
    global ts_global
    ts_global = TS.TablaDeSimbolos()
    if instrucciones is None:
        print('Unnable to Compile. Please Check the Code')
    else:
        grafo = Graficadora()
        grafo.Recorrer_Instrucciones_Inicio(instrucciones)
        Recorrer_Instrucciones(instrucciones, ts_global)
Esempio n. 7
0
    def Ejecucion(self):
        Gram.Ejecucion()
        if len(Lista) > 0:
            self.consola.insert('insert', Lista[0])
        else:
            return

        if len(Lista) > 0:
            self.consola.insert('insert', Lista[0])
        else:
            return
Esempio n. 8
0
def DebuggerIniciar(input):
    global Terminar
    Terminar = False
    global instrdebug
    instrdebug = g.parse(input)
    global ts_global
    Globales.debug = 0
    ts_global = TS.TablaDeSimbolos()
    if instrdebug is None:
        print('Unnable to Compile. Please Check the Code')
    else:
        accion_LlenarTsEtiquetas(
            instrdebug, ts_global)  # tengo que llenar al iniciar mis etiquetas
Esempio n. 9
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
Esempio n. 11
0
def analizar():
    input = content_text.get(1.0,"end-1c")
    #print(input)
    print(".........Analizando....")
    Gramatica.AnalizarInput(input)
Esempio n. 12
0
 def reporte_AST_(self):
     Gram.reporte_AST_GLOB()
Esempio n. 13
0
 def Traducir_Codigo_(self):
     Gram.traducir_AST_GLOB()
     self.enviarC3d()
Esempio n. 14
0
 def reporte_AST_(self):
     try:
         Gram.reporte_AST_GLOB()
     except:
         print("error en el reporte gramatical :(")
Esempio n. 15
0
 def reporte_gramatical_(self):
     try:
         Gram.reporte_gramatical()
     except:
         print("error en el reporte gramatical :(")
Esempio n. 16
0
class AnalizadorSintacticoReglas():
    def __init__(self, lexico):
        self._lexico = lexico

        self._ladoIzquierdoActual = ''

        self._gramatica = Gramatica()

    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

    def getGramaticaGenerada(self):
        return self._gramatica

    def _G(self):
        if self._listaReglas():
            return True
        return False

    def _listaReglas(self):
        if self._regla():
            if self._listaReglas():
                pass
            return True
        return False

    def _regla(self):
        if self._ladoIzquierdo():
            token = self._lexico.getToken()

            if token == TokenReglas.FLECHA:
                if self._listaLadosDerecho():
                    token = self._lexico.getToken()

                    if token == TokenReglas.PUNTO_COMA:
                        self._ladoIzquierdoActual = ''
                        return True
        return False

    def _ladoIzquierdo(self):
        token = self._lexico.getToken()

        if token == TokenReglas.SIMBOLO:
            self._ladoIzquierdoActual = self._lexico.getUltimoLexemaValido()
            self._gramatica.crearNuevaRegla(self._ladoIzquierdoActual)
            return True
        return False

    def _listaLadosDerecho(self):
        if self._ladoDerecho():
            token = self._lexico.getToken()

            if token == TokenReglas.UNION:
                if self._listaLadosDerecho():
                    return True
                return False
            else:
                self._lexico.rewind()
                return True

        return False

    def _ladoDerecho(self):
        if self._listaSimbolo():
            return True
        return False

    def _listaSimbolo(self):
        token = self._lexico.getToken()

        if token == TokenReglas.SIMBOLO:
            self._gramatica.agregarLadoDerecho(
                self._ladoIzquierdoActual,
                [self._lexico.getUltimoLexemaValido()])
            if self._listaSimbolo():
                return True
        else:
            self._lexico.rewind()
            return True
        return False
Esempio n. 17
0
 def Ejecucion(self):
     Gram.Ejecucion()
Esempio n. 18
0
File: AST.py Progetto: mr8ug/tytus
def Analisar(input):
    instrucciones = g.parse(input)
    print(instrucciones)
    ts_global = TS.TablaDeSimbolos()
    procesar_instrucciones(instrucciones, ts_global)
Esempio n. 19
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: ")
Esempio n. 20
0
    def ejecutar_analisis(self):

        #self.consola.setText("****** Preparando Analisis ******")
        self.consola.clear()
        indextab = self.editores.tabText(self.editores.currentIndex())
        ##self.consola.setText("Archivo a analizar: "+indextab)
        tab = self.editores.widget(self.editores.currentIndex())
        items = tab.children()
        codigo = items[0].toPlainText()
        ast = None
        analisis_semantico = False
        lst = []
        print(
            "___________INICIA PROCESO DE ANALISIS LEXICO Y SINTACTICO_______________"
        )
        try:
            if self.analizador_cambiado:
                gramaticaD.lst_errores = []
                ast = gramaticaD.parse(codigo)
                arbolparser = GramaticaDG.parse(codigo)
                graficaAST = GraficarArbol(args=(arbolparser,
                                                 "ASPDescendente"),
                                           daemon=True)
                graficaAST.start()
                graficaGramatical = GraficarGramatica(
                    args=(gramaticaD.lstGrmaticales, "ReporteGramatical"),
                    daemon=True)
                graficaGramatical.start()
                lst = gramaticaD.lst_errores
                gramaticaD.lstGrmaticales = []
            else:
                gramatica.lst_errores = []
                ast2 = gramatica.parse(codigo)
                ast = ast2.instruccion

                graficaAST = GraficarArbol(args=(ast2.nodo, "ASPAscendente"),
                                           daemon=True)
                graficaAST.start()
                graficaGramatical = GraficarGramatica(
                    args=(gramatica.lstGrmaticales, "ReporteGramatical"),
                    daemon=True)
                graficaGramatical.start()
                gramatica.lstGrmaticales = []
                lst = gramatica.lst_errores
        except:
            self.consola.append(
                "/\\/\\/\\/\\/\\ERROR DE LEXICO, SINTACTICO/\\/\\/\\/\\")
            self.consola.append("REVISAR REPORTE DE ERRORES")
        finally:
            if not self.analizador_cambiado:
                gramatica.graficarErrores()
            else:
                gramaticaD.graficarErrores()

        ts = TablaSimbolos()

        global in_console
        if self.debug_mode:
            in_console = Debuger(args=(ast if (ast != None) else ast, ts, lst,
                                       "", items[0], self.consola, self.GTS),
                                 daemon=True)
        else:
            in_console = Ejecutor(args=(ast if (ast != None) else ast, ts, lst,
                                        "", items[0], self.consola, self.GTS),
                                  daemon=True)
        if ast != None:
            try:
                print(
                    "___________INICIA PROCESO DE ANALISIS SEMANTICO_______________"
                )
                recolector = Recolectar(ast, ts, lst)
                print("******FIN CONSTRUCTOR**********")
                recolector.procesar()
                recolector.getErrores()
                print("******FIN RECOLECCION*******")
                print("********** FIN DE CONSTRUCTOR ********")
                in_console.start()
            except:
                self.consola.append(
                    "/\\/\\/\\/\\/\\ERROR DE EJECUCION/\\/\\/\\/\\")
                self.consola.append("REVISAR REPORTE DE ERRORES")
        ts.graficarSimbolos()
Esempio n. 21
0
    def __init__(self, lexico):
        self._lexico = lexico

        self._ladoIzquierdoActual = ''

        self._gramatica = Gramatica()
Esempio n. 22
0
def enviarTexto():
    input=cuadroTxt.get(1.0,"end-1c")
    #print(input)
    print(".........Analizando....")
    Gramatica.AnalizarInput(input)
Esempio n. 23
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")