예제 #1
0
파일: main.py 프로젝트: sandymerida/tytus
    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
예제 #2
0
파일: main.py 프로젝트: sandymerida/tytus
    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)
예제 #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)
예제 #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)
예제 #5
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
예제 #6
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)
예제 #7
0
파일: main.py 프로젝트: sandymerida/tytus
    def btnoptimizar_click(self):
        import optimizacion.sintacticoC3D
        os.system("cls")
        #Elimina el Contenido de txtsalida
        self.txtoptimizacion[self.tab.index("current")].delete(1.0, END)
        #aqui vamos a leer el archivo
        input = self.txtsalida[self.tab.index("current")].get(1.0, END)
        tablaGlobal = Tabla(None)
        inst = optimizacion.sintacticoC3D.ejecutar_analisis2(input)
        arbol = Arbol(inst)
        instru = arbol.instrucciones
        if (instru):
            m = Mirillas(instru)
            m.optimizarCodigo()
            val = m.getItemReporte()
            ro.crear_tabla(val)

        resultado = ""
        tabulador = ""
        for i in arbol.instrucciones:
            # La variable resultado nos permitirá saber si viene un return, break o continue fuera de sus entornos.
            if i:
                if (isinstance(i, MetodoC3D)):
                    tabulador = True

                if (tabulador == True and not (isinstance(i, MetodoC3D))):
                    resultado += "\t"

                if (isinstance(i, Arroba)):
                    resultado += "\r\r"

                resultado += i.ejecutar(tablaGlobal, arbol)

                resultado += "\n"

                if (isinstance(i, SentenciaIf)):
                    resultado += "\t"

        # 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'

        archivo = open("pruebaOpti.py", "w", encoding='utf-8')
        archivo.write(resultado)
        archivo.close()
        self.txtoptimizacion[self.tab.index("current")].insert(
            INSERT, resultado)
예제 #8
0
def funcionintermedia():
	global P
	global Pila
	t0 = P+0
	t1 = t0+1
	t2 = Pila[t1]
	print(t2)
	sql = Pila[t1]
	inst = ejecutar_analisis(sql)
	arbol = Arbol(inst)
	for instruccion in arbol.instrucciones:
		instruccion.ejecutar(tablaGlobal,arbol)
	for msj in arbol.consola:
		print(f"{msj}")
예제 #9
0
파일: main2.py 프로젝트: sandymerida/tytus
    def btnanalizar3D_click(self):
        global arbol
        input = self.txtentrada[self.tab.index("current")].get(1.0, END)
        inst = sintactico3D.ejecutar_analisis(input)

        if len(sintactico3D.lista_lexicos) > 0:
            messagebox.showerror('Tabla de Errores',
                                 'La Entrada Contiene Errores!')
            reportes.RealizarReportes.RealizarReportes.generar_reporte_lexicos(
                sintactico3D.lista_lexicos)

        arbol = Arbol(inst)
        ast = Ast(inst, arbol)
        mensaje = ast.optimizar()

        file = open("optimizado.py", "w")
        file.write(mensaje)
        file.close()
예제 #10
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")
예제 #11
0
파일: main.py 프로젝트: jossiebk/tytus
    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)
예제 #12
0
import sintactico

import reportes.RealizarReportes
import reportes.reportesimbolos as rs
import reportes.RealizarGramatica

from Instrucciones.TablaSimbolos.Tabla import Tabla
from Instrucciones.TablaSimbolos.Arbol import Arbol
from Instrucciones.Excepcion import Excepcion
from Instrucciones.Sql_create.CreateDatabase import CreateDatabase

from Instrucciones.Tablas.BaseDeDatos import BaseDeDatos

global arbol
arbol = Arbol(None)
global tablaGlobal
tablaGlobal = Tabla(None)
global valores
valores = []

class FuncionesPara3D():

    def GenerarArchivo(codigo):
        nombre_archivo = "Codigo_3D/Codigo3D.py"


        #Se borra el contenido del archivo
        f = open(nombre_archivo, "w")
        f.write("")
        f.close()
        f = open(nombre_archivo, "a+")
예제 #13
0
파일: main2.py 프로젝트: jossiebk/tytus
    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)
        
        for i in arbol.instrucciones:
            resultado = i.getCodigo(tablaGlobal,arbol)
            
        # 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"\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"
            
            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 m in arbol.consola:
                mensaje += m + '\n'
            self.txtsalida[self.tab.index("current")].insert(INSERT,mensaje)
            
            mensaje += f"if __name__ == \"__main__\":\n"
            mensaje += f"\tmain()\n"
            
            file = open("traducido.py", "w")
            file.write(mensaje)
            file.close()
예제 #14
0
파일: main.py 프로젝트: sandymerida/tytus
    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()
예제 #15
0
from Instrucciones.TablaSimbolos.Instruccion import Instruccion
from Instrucciones.TablaSimbolos.Arbol import Arbol
from Instrucciones.Tablas.BaseDeDatos import BaseDeDatos
from Instrucciones.Tablas.Tablas import Tablas
from Instrucciones.TablaSimbolos.Tipo import *
from storageManager.jsonMode import *

a = Arbol([])
#create base
nueva = BaseDeDatos("Shingeki")
a.setListaBd(nueva)
nueva2 = BaseDeDatos("Shokugeki")
a.setListaBd(nueva2)
#use
a.setBaseDatos("Shingeki")
#create tabla
tablaNueva = Tablas("temporada 1", None)
tablaNueva2 = Tablas("temporada 2", None)
tablaNueva3 = Tablas("temporada 3", None)

a.agregarTablaABd(tablaNueva)
a.agregarTablaABd(tablaNueva2)
a.agregarTablaABd(tablaNueva3)

tablaNueva.agregarColumna("capitulo1", Tipo("", Tipo_Dato.INTEGER), None)
tablaNueva.agregarColumna("capitulo2", Tipo("", Tipo_Dato.INTEGER), None)
tablaNueva.agregarColumna("capitulo3", Tipo("", Tipo_Dato.INTEGER), None)
예제 #16
0
파일: main.py 프로젝트: Sohanyuuu/tytus
    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)
예제 #17
0
from goto import with_goto
from Instrucciones.TablaSimbolos.Tabla import Tabla
from Instrucciones.Sql_insert import insertTable
from Instrucciones.TablaSimbolos.Arbol import Arbol
from storageManager.jsonMode import *
import sintactico

tablaGlobal = Tabla(None)
arbol = Arbol()


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)


def call_insert_table():
    arbolAux = arbol
    arbolAux.bdUsar = heap[p - 3]
    tabla = insertTable.insertTable(heap[p - 2], None, heap[p - 1], heap[p],
                                    '', 0, 0)
    tabla.ejecutar(tablaGlobal, arbolAux)