Ejemplo n.º 1
0
    def btnanalizar_click(self):
        global arbol
        arbol = None
        dropAll()
        os.system ("cls")
        #Elimina el Contenido de txtsalida
        self.txtsalida[self.tab.index("current")].delete(1.0,END)
        #Inserta "Archivo Analizado" en txtsalida
        #self.txtsalida[self.tab.index("current")].insert(INSERT,"Archivo Analizado")
        #Selecciona el contenido de txt entrada
        #print(self.txtentrada[self.tab.index("current")].get(1.0,END))
        input=self.txtentrada[self.tab.index("current")].get(1.0,END)
        tablaGlobal = Tabla(None)
        inst = sintactico.ejecutar_analisis(input)
        arbol = Arbol(inst)

        if len(sintactico.lista_lexicos)>0:
            messagebox.showerror('Tabla de Errores','La Entrada Contiene Errores!')
            reportes.RealizarReportes.RealizarReportes.generar_reporte_lexicos(sintactico.lista_lexicos)
        # Ciclo que recorrerá todas las instrucciones almacenadas por la gramática.
        arbol.lRepDin.append("<init> ::= <instrucciones>")
        arbol.lRepDin.append("<instrucciones>   ::=  <instrucciones> <instruccion>")
        arbol.lRepDin.append("<instrucciones> ::= <instruccion>")
        
        for i in arbol.instrucciones:
            # La variable resultado nos permitirá saber si viene un return, break o continue fuera de sus entornos.
            resultado = i.ejecutar(tablaGlobal,arbol)
        # Después de haber ejecutado todas las instrucciones se verifica que no hayan errores semánticos.
        if len(arbol.excepciones) != 0:
            reportes.RealizarReportes.RealizarReportes.generar_reporte_lexicos(arbol.excepciones)
        # Ciclo que imprimirá todos los mensajes guardados en la variable consola.
        mensaje = ''
        for m in arbol.consola:
            mensaje += m + '\n'
        self.txtsalida[self.tab.index("current")].insert(INSERT,mensaje)
Ejemplo n.º 2
0
    def traducirc3d_click(self):
        global arbol
        arbol = None
        global tablaSym
        dropAll()
        os.system("cls")
        #Elimina el Contenido de txtsalida
        self.txtsalida[self.tab.index("current")].delete(1.0, END)
        input = self.txtentrada[self.tab.index("current")].get(1.0, END)

        tablaGlobal = Tabla(None)
        inst = sintactico.ejecutar_analisis(input)
        arbol = Arbol(inst)
        resultado = ""
        for i in arbol.instrucciones:
            res = i.traducir(tablaGlobal, arbol, "")
            if isinstance(res, Simbolo3d):
                resultado += res.codigo
            else:
                resultado += res

        FuncionesPara3D.FuncionesPara3D.GenerarArchivo(resultado)
        tablaSym = tablaGlobal
        print("Archivo Traducido")
        pass
Ejemplo n.º 3
0
def ejecutar3D():
    input = ""
    for i in stack:
        input += stack[i] + "\n"
    print(input)
    inst = sintactico.ejecutar_analisis(input)
    arbol = Arbol(inst)
    for i in arbol.instrucciones:
        resultado = i.ejecutar(tablaGlobal, arbol)
Ejemplo n.º 4
0
def call_funcion_intermedia():
    dropAll()
    input = ""
    for i in stack:
        input += stack[i] + "\n"
    print(input)
    inst = sintactico.ejecutar_analisis(input)
    arbol = Arbol(inst)
    for i in arbol.instrucciones:
        resultado = i.ejecutar(tablaGlobal, arbol)
Ejemplo n.º 5
0
def funcionintermedia():
	global P
	global Pila
	t0 = P+0
	t1 = t0+1
	t2 = Pila[t1]
	print(t2)
	tablaGlobal = Tabla(None)
	inst = sintactico.ejecutar_analisis(t2)
	arbol = Arbol(inst)
	arbol.instrucciones[0].ejecutar(tablaGlobal,arbol)
Ejemplo n.º 6
0
    def primerapasada(self):
        global arbol
        arbol = None
        dropAll()
        os.system("cls")
        #Elimina el Contenido de txtsalida
        self.txtsalida[self.tab.index("current")].delete(1.0, END)
        #Inserta "Archivo Analizado" en txtsalida
        #self.txtsalida[self.tab.index("current")].insert(INSERT,"Archivo Analizado")
        #Selecciona el contenido de txt entrada
        #print(self.txtentrada[self.tab.index("current")].get(1.0,END))
        input = self.txtentrada[self.tab.index("current")].get(1.0, END)
        tablaGlobal = Tabla(None)
        inst = sintactico.ejecutar_analisis(input)
        arbol = Arbol(inst)

        if len(sintactico.lista_lexicos) > 0:
            messagebox.showerror('Tabla de Errores',
                                 'La Entrada Contiene Errores!')
            reportes.RealizarReportes.RealizarReportes.generar_reporte_lexicos(
                sintactico.lista_lexicos)
        # Ciclo que recorrerá todas las instrucciones almacenadas por la gramática.
        arbol.lRepDin.append("<init> ::= <instrucciones>")
        arbol.lRepDin.append(
            "<instrucciones>   ::=  <instrucciones> <instruccion>")
        arbol.lRepDin.append("<instrucciones> ::= <instruccion>")

        j = 0
        h = 0
        for i in arbol.instrucciones:
            # La variable resultado nos permitirá saber si viene un return, break o continue fuera de sus entornos.
            print("analizara")
            print(i)

            try:
                print("al")
                if isinstance(i, Execute.Execute):

                    print("es execute con j= " + str(j))

                    i.generar(j, tablaGlobal, arbol)
                    j = j + 1
                if isinstance(i, insertTable.insertTable):

                    j = i.validar(j, tablaGlobal, arbol)

                    print("es insertTable con j= " + str(j))

                print("NOes execute")

            except:
                print("ara")

                pass
Ejemplo n.º 7
0
 def btnanalizar_click(self):
     os.system ("cls")
     #Elimina el Contenido de txtsalida
     self.txtsalida[self.tab.index("current")].delete(1.0,END)
     #Inserta "Archivo Analizado" en txtsalida
     #self.txtsalida[self.tab.index("current")].insert(INSERT,"Archivo Analizado")
     #Selecciona el contenido de txt entrada
     #print(self.txtentrada[self.tab.index("current")].get(1.0,END))
     input=self.txtentrada[self.tab.index("current")].get(1.0,END)
     #l_recolectora = ejecutar_analisis(input)
     Tbl_Erroresr=sintactico.ejecutar_analisis(input)
     self.txtsalida[self.tab.index("current")].insert(INSERT,"Archivo Analizado")
Ejemplo n.º 8
0
 def btnanalizar_click(self):
     os.system ("cls")
     #Elimina el Contenido de txtsalida
     self.txtsalida[self.tab.index("current")].delete(1.0,END)
     #Inserta "Archivo Analizado" en txtsalida
     #self.txtsalida[self.tab.index("current")].insert(INSERT,"Archivo Analizado")
     #Selecciona el contenido de txt entrada
     #print(self.txtentrada[self.tab.index("current")].get(1.0,END))
     input=self.txtentrada[self.tab.index("current")].get(1.0,END)
     tablaGlobal = Tabla(None)
     inst = sintactico.ejecutar_analisis(input)
     arbol = Arbol(inst)
     # Ciclo que recorrerá todas las instrucciones almacenadas por la gramática.
     for i in arbol.instrucciones:
         # La variable resultado nos permitirá saber si viene un return, break o continue fuera de sus entornos.
         resultado = i.ejecutar(tablaGlobal,arbol)
     # Después de haber ejecutado todas las instrucciones se verifica que no hayan errores semánticos.
     if len(arbol.excepciones) != 0:
         reportes.RealizarReportes.RealizarReportes.generar_reporte_lexicos(arbol.excepciones)
     # Ciclo que imprimirá todos los mensajes guardados en la variable consola.
     for m in arbol.consola:
         print(m)
     self.txtsalida[self.tab.index("current")].insert(INSERT,"Archivo Analizado")
Ejemplo n.º 9
0
    def ejecutarsentecia(sentecia):
        global arbol
        global tablaGlobal
        global valores
        #Elimina el Contenido de txtsalida
        #Inserta "Archivo Analizado" en txtsalida
        #self.txtsalida[self.tab.index("current")].insert(INSERT,"Archivo Analizado")
        #Selecciona el contenido de txt entrada
        #print(self.txtentrada[self.tab.index("current")].get(1.0,END))
        input=sentecia
        
        inst = sintactico.ejecutar_analisis(input)
        arbol.setInstrucciones(inst)

        if len(sintactico.lista_lexicos)>0:
            messagebox.showerror('Tabla de Errores','La Entrada Contiene Errores!')
            reportes.RealizarReportes.RealizarReportes.generar_reporte_lexicos(sintactico.lista_lexicos)
        # Ciclo que recorrerá todas las instrucciones almacenadas por la gramática.
        arbol.lRepDin.append("<init> ::= <instrucciones>")
        arbol.lRepDin.append("<instrucciones>   ::=  <instrucciones> <instruccion>")
        arbol.lRepDin.append("<instrucciones> ::= <instruccion>")
        
        for i in arbol.instrucciones:
            # La variable resultado nos permitirá saber si viene un return, break o continue fuera de sus entornos.
            resultado = i.ejecutar(tablaGlobal,arbol)
        # Después de haber ejecutado todas las instrucciones se verifica que no hayan errores semánticos.
        if len(arbol.excepciones) != 0:
            reportes.RealizarReportes.RealizarReportes.generar_reporte_lexicos(arbol.excepciones)
        # Ciclo que imprimirá todos los mensajes guardados en la variable consola.
        mensaje = ''
        
        mensaje += arbol.consola[-1] + '\n'
        valores = arbol.valoresActuales
        if "SELECT" in str.upper(sentecia):
            return valores[0][0]
        else:
            return mensaje
Ejemplo n.º 10
0
    def btnanalizar_click(self):
        self.start()
        self.primerapasada()
        #  if(1==1):
        #return
        global arbol
        arbol = None
        dropAll()

        os.system("cls")
        #Elimina el Contenido de txtsalida
        self.txtsalida[self.tab.index("current")].delete(1.0, END)
        #Inserta "Archivo Analizado" en txtsalida
        #self.txtsalida[self.tab.index("current")].insert(INSERT,"Archivo Analizado")
        #Selecciona el contenido de txt entrada
        #print(self.txtentrada[self.tab.index("current")].get(1.0,END))
        input = self.txtentrada[self.tab.index("current")].get(1.0, END)
        tablaGlobal = Tabla(None)
        inst = sintactico.ejecutar_analisis(input)
        arbol = Arbol(inst)

        if len(sintactico.lista_lexicos) > 0:
            messagebox.showerror('Tabla de Errores',
                                 'La Entrada Contiene Errores!')
            reportes.RealizarReportes.RealizarReportes.generar_reporte_lexicos(
                sintactico.lista_lexicos)
        # Ciclo que recorrerá todas las instrucciones almacenadas por la gramática.
        arbol.lRepDin.append("<init> ::= <instrucciones>")
        arbol.lRepDin.append(
            "<instrucciones>   ::=  <instrucciones> <instruccion>")
        arbol.lRepDin.append("<instrucciones> ::= <instruccion>")

        for i in arbol.instrucciones:
            # La variable resultado nos permitirá saber si viene un return, break o continue fuera de sus entornos.
            print("analizara")
            print(i)
            try:
                print("al")

                resultado = i.analizar(tablaGlobal, arbol)
                print("alj")

            except:
                print("ara")

                pass

        self.tablageneral = tablaGlobal

        # Ciclo que imprimirá todos los mensajes guardados en la variable consola.
        mensaje = ''
        for m in arbol.consola:
            mensaje += m + '\n'
        self.txtsalida[self.tab.index("current")].insert(INSERT, mensaje)

        # Después de haber ejecutado todas las instrucciones se verifica que no hayan errores semánticos.
        if len(arbol.excepciones) != 0:
            reportes.RealizarReportes.RealizarReportes.generar_reporte_lexicos(
                arbol.excepciones)
        else:
            for i in arbol.instrucciones:

                try:
                    i.traducir(tablaGlobal, arbol)
                except:
                    pass

        # c3d = 'from goto import with_goto\n'
            c3d = 'import sys\n'
            #  c3d = 'from goto import with_goto\n'

            c3d += 'global P\n'
            c3d += 'global Pila\n'
            c3d += 'P = 0\n'
            c3d += 'Pila = [None] * 1000\n'
            c3d += self.funcionintermedia()
            #  c3d += '@with_goto \n'
            c3d += arbol.cadenaf

            c3d += 'def main():\n'
            c3d += '\tglobal P\n'
            c3d += '\tglobal Pila\n'
            c3d += arbol.cadena
            print("arbol.cadena es " + arbol.cadena)

            c3d += 'if __name__ == \"__main__\":\n'
            c3d += '\tstart()\n'
            c3d += '\tmain()\n'

            archivo = open("codigo3d.py", "w")
            archivo.write(c3d)
            archivo.close()
            self.txtsalida[self.tab.index("current")].insert(INSERT, c3d)
Ejemplo n.º 11
0
    def btngetCodigo_click(self):
        global arbol
        arbol = None
        dropAll()
        os.system ("cls")
        self.txtsalida[self.tab.index("current")].delete(1.0,END)
        input=self.txtentrada[self.tab.index("current")].get(1.0,END)
        tablaGlobal = Tabla(None)
        inst = sintactico.ejecutar_analisis(input)
        arbol = Arbol(inst)

        if len(sintactico.lista_lexicos)>0:
            messagebox.showerror('Tabla de Errores','La Entrada Contiene Errores!')
            reportes.RealizarReportes.RealizarReportes.generar_reporte_lexicos(sintactico.lista_lexicos)
        
        #PRIMERA PASADA: Para almacenar las funciones, procedimientos y variables
        for i in arbol.instrucciones:
            scope = 'Global'
            if isinstance(i, Proc):
                rol = 'Función' if i.ret else 'Procedimiento'
                symbol = {'name': i.name, 'type': '--', 'scope': scope, 'rol': rol, 'pointer': '--'}
                arbol.addSymbol(i.name, symbol)
                scope = i.name
                
                pointer = 0
                if i.ret:
                    symbol = {'name': 'return', 'type': '--', 'scope': scope, 'rol': 'Variable Local', 'pointer': str(pointer)}
                    arbol.addSymbol('return', symbol)
                    pointer += 1
                
                for param in i.params:
                    symbol = {'name': param[0], 'type': param[1].toString(), 'scope': scope, 'rol': 'Variable Local', 'pointer': str(pointer)}
                    arbol.addSymbol(param[0], symbol)
                    pointer += 1
                    
                for inst in i.block.instructions:
                    if isinstance(inst, Statement):
                        dec = inst.dec
                        symbol = {'name': dec[0], 'type': dec[1].toString(), 'scope': scope, 'rol': 'Variable Local', 'pointer': str(pointer)}
                        arbol.addSymbol(dec[0], symbol)
                        pointer += 1
                        
            
        # Después de haber ejecutado todas las instrucciones se verifica que no hayan errores semáretunticos.
        if len(arbol.excepciones) != 0:
            reportes.RealizarReportes.RealizarReportes.generar_reporte_lexicos(arbol.excepciones)
        else:
            mensaje = f"from goto import with_goto\n\n"
            mensaje += f"from Instrucciones.TablaSimbolos.Tabla import Tabla\n"
            mensaje += f"from Instrucciones.TablaSimbolos.Arbol import Arbol\n"
            mensaje += f"\n"
            mensaje += f"import sintactico\n"
            mensaje += f"from Instrucciones.Sql_create.CreateDatabase import CreateDatabase\n"
            mensaje += f"from Instrucciones.Sql_create.ShowDatabases import ShowDatabases\n"
            mensaje += f"from Instrucciones.Sql_create.Use import Use\n"
            mensaje += f"from Instrucciones.Sql_create.CreateTable import CreateTable\n"
            mensaje += f"from Instrucciones.Sql_alter.AlterDatabase import AlterDatabase\n"    
            mensaje += f"from Instrucciones.Sql_alter.AlterDBOwner import AlterDBOwner\n"  
            mensaje += f"from Instrucciones.Sql_drop.DropDatabase import DropDatabase\n"
            mensaje += f"from Instrucciones.Sql_drop.DropTable import DropTable\n"     
            mensaje += f"from Instrucciones.Sql_select.Select import Select\n"
            mensaje += f"from Instrucciones.Sql_insert import insertTable\n"
            mensaje += f"from Instrucciones.Expresiones.Primitivo import Primitivo\n"
            mensaje += f"from Instrucciones.TablaSimbolos.Tipo import Tipo\n"
            mensaje += f"from Instrucciones.TablaSimbolos.Tipo import Tipo_Dato\n"
            mensaje += f"from Instrucciones.FunctionMathematical.Trunc import Trunc\n"
            mensaje += f"from Instrucciones.FunctionMathematical.Abs import Abs\n"
            mensaje += f"from Instrucciones.FunctionMathematical.Sqrt import Sqrt\n"
            mensaje += f"from Instrucciones.FunctionTrigonometric.Sin import Sin\n"
            mensaje += f"from Instrucciones.FunctionTrigonometric.Sinh import Sinh\n"
            mensaje += f"from Instrucciones.FunctionTrigonometric.Acosd import Acosd\n"
            mensaje += f"from Instrucciones.FunctionBinaryString.Length import Length\n"
            mensaje += f"from Instrucciones.FunctionBinaryString.Substring import Substring\n"
            mensaje += f"\n"
            mensaje += f"global pointer\n"
            mensaje += f"global stack\n"
            mensaje += f"global table\n"
            mensaje += f"global tree\n"
            mensaje += f"\n"
            mensaje += f"pointer = 0\n"
            mensaje += f"stack = [None] * 10000\n"
            mensaje += f"table = Tabla(None)\n"
            mensaje += f"tree = Arbol(None)\n\n"
            
            for i in arbol.instrucciones:
                if isinstance(i, Proc):
                    mensaje += i.getCodigo(tablaGlobal,arbol)
            
            mensaje += self.getFuncionIntermedia(arbol)
            
            mensaje += f"@with_goto\n"
            mensaje += f"def main():\n"
            mensaje += f"\tglobal pointer\n"
            mensaje += f"\tglobal stack\n"
            
            for i in arbol.instrucciones:
                if not isinstance(i, Proc):
                    if isinstance(i, Call):
                        result = i.getCodigo(tablaGlobal,arbol)
                        mensaje += result['codigo']
                    else:
                        mensaje += i.getCodigo(tablaGlobal,arbol)
                    mensaje += f"\n"
            
            mensaje += f"\n"
            mensaje += f"main()\n"
            
            self.txtsalida[self.tab.index("current")].insert(INSERT,mensaje)
            
            file = open("traducido.py", "w")
            file.write(mensaje)
            file.close()
Ejemplo n.º 12
0
    def btnanalizar_click(self):
        global arbol
        arbol = None
        dropAll()
        os.system("cls")
        #Elimina el Contenido de txtsalida
        self.txtsalida[self.tab.index("current")].delete(1.0, END)
        #Inserta "Archivo Analizado" en txtsalida
        #self.txtsalida[self.tab.index("current")].insert(INSERT,"Archivo Analizado")
        #Selecciona el contenido de txt entrada
        #print(self.txtentrada[self.tab.index("current")].get(1.0,END))
        input = self.txtentrada[self.tab.index("current")].get(1.0, END)
        tablaGlobal = Tabla(None)
        inst = sintactico.ejecutar_analisis(input)
        arbol = Arbol(inst)

        if len(sintactico.lista_lexicos) > 0:
            messagebox.showerror('Tabla de Errores',
                                 'La Entrada Contiene Errores!')
            reportes.RealizarReportes.RealizarReportes.generar_reporte_lexicos(
                sintactico.lista_lexicos)
        # Ciclo que recorrerá todas las instrucciones almacenadas por la gramática.
        arbol.lRepDin.append("<init> ::= <instrucciones>")
        arbol.lRepDin.append(
            "<instrucciones>   ::=  <instrucciones> <instruccion>")
        arbol.lRepDin.append("<instrucciones> ::= <instruccion>")
        '''
        for i in arbol.instrucciones:
            # La variable resultado nos permitirá saber si viene un return, break o continue fuera de sus entornos.
            resultado = i.ejecutar(tablaGlobal,arbol)
        # Después de haber ejecutado todas las instrucciones se verifica que no hayan errores semánticos.
        if len(arbol.excepciones) != 0:
            reportes.RealizarReportes.RealizarReportes.generar_reporte_lexicos(arbol.excepciones)
        # Ciclo que imprimirá todos los mensajes guardados en la variable consola.
        mensaje = ''
        for m in arbol.consola:
            mensaje += m + '\n'
        self.txtsalida[self.tab.index("current")].insert(INSERT,mensaje)
        '''
        # Buscar funciones
        for i in arbol.instrucciones:
            if isinstance(i, Func):
                i.llenarTS(tablaGlobal, arbol)

        for i in arbol.instrucciones:
            # La variable resultado nos permitirá saber si viene un return, break o continue fuera de sus entornos.
            resultado = i.analizar(tablaGlobal, arbol)

        # Ciclo que imprimirá todos los mensajes guardados en la variable consola.
        mensaje = ''
        for m in arbol.consola:
            mensaje += m + '\n'
        self.txtsalida[self.tab.index("current")].insert(INSERT, mensaje)

        # Después de haber ejecutado todas las instrucciones se verifica que no hayan errores semánticos.
        if len(arbol.excepciones) != 0:
            reportes.RealizarReportes.RealizarReportes.generar_reporte_lexicos(
                arbol.excepciones)
        else:
            c3d = 'from goto import with_goto\n'
            c3d += 'from sintactico import *\n'
            c3d += 'from Instrucciones.TablaSimbolos.Tabla import Tabla\n'
            c3d += 'from Instrucciones.TablaSimbolos.Arbol import Arbol\n'
            c3d += 'import sys\n'
            c3d += 'global P\n'
            c3d += 'global Pila\n'
            c3d += 'P = 0\n'
            c3d += 'Pila = [None] * 1000\n'

            c3d += 'tablaGlobal = Tabla(None)\n'
            c3d += 'global sql\n'
            c3d += 'global inst\n'
            c3d += 'global arbol\n'

            c3d += self.funcionintermedia()
            c3d += '@with_goto  # Decorador necesario.\n'

            # Agregamos las funciones al reporte
            for i in tablaGlobal.variables:
                tablaGlobal.agregarReporteSimbolo(i)

            # Se traducen las funciones
            for i in arbol.instrucciones:
                if isinstance(i, Func):
                    i.traducir(tablaGlobal, arbol)
            c3d += arbol.cadena

            c3d += 'def main():\n'
            c3d += '\tglobal P\n'
            c3d += '\tglobal Pila\n'

            # Se traducen el resto de las demás sentencias
            arbol.cadena = ""
            for i in arbol.instrucciones:
                if not isinstance(i, Func):
                    i.traducir(tablaGlobal, arbol)

            c3d += arbol.cadena
            c3d += 'if __name__ == \"__main__\":\n'
            c3d += '\tmain()'
            archivo = open("prueba.py", "w", encoding='utf-8')
            archivo.write(c3d)
            archivo.close()
            self.txtsalida[self.tab.index("current")].insert(INSERT, c3d)