예제 #1
0
파일: Case.py 프로젝트: Sohanyuuu/tytus
    def traducir(self, tabla: Tabla, arbol: Arbol):
        super().traducir(tabla, arbol)
        retorno = Nodo3D()
        arbol.addc3d("# Inicia When")

        # Se traducen todas las funciones dentro del case
        for i in self.instrucciones:
            i.traducir(tabla, arbol)

        return
예제 #2
0
파일: Elsif.py 프로젝트: sandymerida/tytus
    def traducir(self, tabla: Tabla, arbol: Arbol):
        super().traducir(tabla, arbol)
        retorno = Nodo3D()
        arbol.addc3d("# Inicia Elsif")
        condicion = self.condicion.traducir(tabla, arbol)
        if condicion.temporalAnterior == "0":
            etiqueta1 = tabla.getEtiqueta()
            arbol.addc3d(f"goto .{etiqueta1}")
            condicion.etiquetaTrue = ""
            condicion.etiquetaFalse = etiqueta1
        elif condicion.temporalAnterior == "1":
            etiqueta1 = tabla.getEtiqueta()
            arbol.addc3d(f"goto .{etiqueta1}")
            condicion.etiquetaTrue = etiqueta1
            condicion.etiquetaFalse = ""

        etiquetaFin = tabla.getEtiqueta()
        condicion.imprimirEtiquetDestino(arbol, condicion.etiquetaTrue)
        # Se traducen todas las funciones dentro del if
        for i in self.instrucciones:
            i.traducir(tabla, arbol)
        arbol.addc3d(f"goto .{etiquetaFin}")
        condicion.imprimirEtiquetDestino(arbol, condicion.etiquetaFalse)
        retorno.temporalAnterior = f"label .{etiquetaFin}"
        return retorno
예제 #3
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)
예제 #4
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
예제 #5
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)
예제 #6
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)
예제 #7
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
예제 #8
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)
예제 #9
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)
예제 #10
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}")
예제 #11
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()
예제 #12
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")
예제 #13
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)
예제 #14
0
파일: Logica.py 프로젝트: sandymerida/tytus
 def traducir(self, tabla: Tabla, arbol: Arbol):
     super().traducir(tabla,arbol)
     retorno = Nodo3D()
     resultadoIzq = self.opIzq.traducir(tabla,arbol)
     if self.operador == 'AND':
         if isinstance(resultadoIzq, str):
             cadena = f"{resultadoIzq} AND "
             if isinstance(self.opDer, str):
                 cadena += self.opDer + " "
             else:
                 cadena += self.opDer.traducir(tabla,arbol)
             return cadena
         if resultadoIzq.temporalAnterior == "0":
             etiqueta1 = tabla.getEtiqueta()
             arbol.addc3d(f"goto .{etiqueta1}")
             resultadoDer = self.opDer.traducir(tabla,arbol)
             if resultadoDer.temporalAnterior == "0":
                 # False and False
                 etiqueta2 = tabla.getEtiqueta()
                 arbol.addc3d(f"goto .{etiqueta2}")
                 retorno.etiquetaTrue = ''
                 retorno.etiquetaFalse = f"{etiqueta1},{etiqueta2}"
             elif resultadoDer.temporalAnterior == "1":
                 # False and True
                 etiqueta2 = tabla.getEtiqueta()
                 arbol.addc3d(f"goto .{etiqueta2}")
                 arbol.addc3d(f"label .{etiqueta2}")
                 retorno.etiquetaTrue = ""
                 retorno.etiquetaFalse = f"{etiqueta1}"
             else:
                 # False and Operación Relacional
                 retorno.etiquetaTrue = resultadoDer.etiquetaTrue
                 retorno.etiquetaFalse = f"{etiqueta1},{resultadoDer.etiquetaFalse}"
             return retorno
         elif resultadoIzq.temporalAnterior == "1":
             etiqueta1 = tabla.getEtiqueta()
             arbol.addc3d(f"goto .{etiqueta1}")
             arbol.addc3d(f"label .{etiqueta1}")
             resultadoDer = self.opDer.traducir(tabla,arbol)
             if resultadoDer.temporalAnterior == "0":
                 # True and False
                 etiqueta2 = tabla.getEtiqueta()
                 arbol.addc3d(f"goto .{etiqueta2}")
                 retorno.etiquetaTrue = ''
                 retorno.etiquetaFalse = f"{etiqueta2}"
             elif resultadoDer.temporalAnterior == "1":
                 # True and True
                 etiqueta2 = tabla.getEtiqueta()
                 arbol.addc3d(f"goto .{etiqueta2}")
                 retorno.etiquetaTrue = f"{etiqueta2}"
                 retorno.etiquetaFalse = ""
             else:
                 # True and Operación Relacional
                 retorno.etiquetaTrue = resultadoDer.etiquetaTrue
                 retorno.etiquetaFalse = resultadoDer.etiquetaFalse
             return retorno
         
         retorno.imprimirEtiquetDestino(arbol, resultadoIzq.etiquetaTrue)
         resultadoDer = self.opDer.traducir(tabla, arbol)
         if resultadoDer.temporalAnterior == "0":
             # Operación Relacional and False
             etiqueta1 = tabla.getEtiqueta()
             arbol.addc3d(f"goto .{etiqueta1}")
             retorno.etiquetaTrue = ''
             retorno.etiquetaFalse = f"{resultadoIzq.etiquetaFalse},{etiqueta1}"
             return retorno
         elif resultadoDer.temporalAnterior == "1":
             # Operación Relacional and True
             etiqueta1 = tabla.getEtiqueta()
             arbol.addc3d(f"goto .{etiqueta1}")
             retorno.etiquetaTrue = f"{etiqueta1}"
             retorno.etiquetaFalse = f"{resultadoIzq.etiquetaFalse}"
             return retorno
         # Operación Relacional and Operación Relacional
         retorno.etiquetaTrue = resultadoDer.etiquetaTrue
         retorno.etiquetaFalse = f"{resultadoIzq.etiquetaFalse},{resultadoDer.etiquetaFalse}"
         return retorno
     elif self.operador == 'OR':
         if resultadoIzq.temporalAnterior == "0":
             etiqueta1 = tabla.getEtiqueta()
             arbol.addc3d(f"goto .{etiqueta1}")
             arbol.addc3d(f"label .{etiqueta1}")
             resultadoDer = self.opDer.traducir(tabla,arbol)
             if resultadoDer.temporalAnterior == "0":
                 # False or False
                 etiqueta2 = tabla.getEtiqueta()
                 arbol.addc3d(f"goto .{etiqueta2}")
                 retorno.etiquetaTrue = ""
                 retorno.etiquetaFalse = etiqueta2
             elif resultadoDer.temporalAnterior == "1":
                 # False or True
                 etiqueta2 = tabla.getEtiqueta()
                 arbol.addc3d(f"goto .{etiqueta2}")
                 retorno.etiquetaTrue = etiqueta2
                 retorno.etiquetaFalse = ""
             else:
                 # False or Operación Relacional
                 retorno.etiquetaTrue = resultadoDer.etiquetaTrue
                 retorno.etiquetaFalse = resultadoDer.etiquetaFalse
             return retorno
         elif resultadoIzq.temporalAnterior == "1":
             etiqueta1 = tabla.getEtiqueta()
             arbol.addc3d(f"goto .{etiqueta1}")
             resultadoDer = self.opDer.traducir(tabla, arbol)
             if resultadoDer.temporalAnterior == "0":
                 # True or False
                 etiqueta2 = tabla.getEtiqueta()
                 arbol.addc3d(f"goto .{etiqueta2}")
                 retorno.etiquetaTrue = etiqueta1
                 retorno.etiquetaFalse = etiqueta2
             elif resultadoDer.temporalAnterior == "1":
                 # True or True
                 etiqueta2 = tabla.getEtiqueta()
                 arbol.addc3d(f"goto .{etiqueta2}")
                 retorno.etiquetaTrue = f"{etiqueta1},{etiqueta2}"
                 retorno.etiquetaFalse = ""
             else:
                 # True or Operación Relacional
                 retorno.etiquetaTrue = f"{etiqueta1},{resultadoDer.etiquetaTrue}"
                 retorno.etiquetaFalse = resultadoDer.etiquetaFalse
             return retorno
         retorno.imprimirEtiquetDestino(arbol, resultadoIzq.etiquetaFalse)
         resultadoDer = self.opDer.traducir(tabla, arbol)
         if resultadoDer.temporalAnterior == "0":
             # Operación Relacional or False
             etiqueta1 = tabla.getEtiqueta()
             arbol.addc3d(f"goto .{etiqueta1}")
             retorno.etiquetaTrue = resultadoIzq.etiquetaTrue
             retorno.etiquetaFalse = etiqueta1
             return retorno
         elif resultadoDer.temporalAnterior == "1":
             # Operación Relacional or True
             etiqueta1 = tabla.getEtiqueta()
             arbol.addc3d(f"goto .{etiqueta1}")
             retorno.etiquetaTrue = f"{resultadoIzq.etiquetaTrue},{etiqueta1}"
             retorno.etiquetaFalse = ""
             return retorno
         # Operación Relacional or Operación Relacional
         retorno.etiquetaTrue = f"{resultadoIzq.etiquetaTrue},{resultadoDer.etiquetaTrue}"
         retorno.etiquetaFalse = resultadoDer.etiquetaFalse
         return retorno
     elif self.operador == 'NOT':
         if resultadoIzq.temporalAnterior == "0":
             # False
             retorno.temporalAnterior = "1"
         elif resultadoIzq.temporalAnterior == "1":
             # True
             retorno.temporalAnterior = "0"
         else:
             # Operación Relacional
             retorno.etiquetaTrue = resultadoIzq.etiquetaFalse
             retorno.etiquetaFalse = resultadoIzq.etiquetaTrue
         return retorno
예제 #15
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+")
예제 #16
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()
예제 #17
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()
예제 #18
0
    def traducir(self, tabla: Tabla, arbol: Arbol):
        super().traducir(tabla, arbol)
        retorno = Nodo3D()
        arbol.addc3d("# Inicia If")
        condicion = self.condicion.traducir(tabla, arbol)
        # If
        if len(self.l_if) == 0 and len(self.instrucciones_else) == 0:
            if condicion.temporalAnterior == "0":
                etiqueta1 = tabla.getEtiqueta()
                arbol.addc3d(f"goto .{etiqueta1}")
                condicion.etiquetaTrue = ""
                condicion.etiquetaFalse = etiqueta1
            elif condicion.temporalAnterior == "1":
                etiqueta1 = tabla.getEtiqueta()
                arbol.addc3d(f"goto .{etiqueta1}")
                condicion.etiquetaTrue = etiqueta1
                condicion.etiquetaFalse = ""

            etiquetaFin = tabla.getEtiqueta()
            condicion.imprimirEtiquetDestino(arbol, condicion.etiquetaTrue)
            # Se traducen todas las funciones dentro del if
            for i in self.instrucciones:
                i.traducir(tabla, arbol)
            arbol.addc3d(f"goto .{etiquetaFin}")
            condicion.imprimirEtiquetDestino(arbol, condicion.etiquetaFalse)
            arbol.addc3d(f"label .{etiquetaFin}")
        # If - Else
        elif len(self.l_if) == 0 and len(self.instrucciones_else) != 0:
            if condicion.temporalAnterior == "0":
                etiqueta1 = tabla.getEtiqueta()
                arbol.addc3d(f"goto .{etiqueta1}")
                condicion.etiquetaTrue = ""
                condicion.etiquetaFalse = etiqueta1
            elif condicion.temporalAnterior == "1":
                etiqueta1 = tabla.getEtiqueta()
                arbol.addc3d(f"goto .{etiqueta1}")
                condicion.etiquetaTrue = etiqueta1
                condicion.etiquetaFalse = ""

            etiquetaFin = tabla.getEtiqueta()
            condicion.imprimirEtiquetDestino(arbol, condicion.etiquetaTrue)

            # Se traducen todas las instrucciones dentro del if
            for i in self.instrucciones:
                i.traducir(tabla, arbol)
            arbol.addc3d(f"goto .{etiquetaFin}")
            condicion.imprimirEtiquetDestino(arbol, condicion.etiquetaFalse)

            # Else
            # Se traducen todas las instrucciones dentro del else
            for i in self.instrucciones_else:
                i.traducir(tabla, arbol)

            arbol.addc3d(f"label .{etiquetaFin}")
        # If ... Elsif
        elif len(self.l_if) > 0 and len(self.instrucciones_else) == 0:
            if condicion.temporalAnterior == "0":
                etiqueta1 = tabla.getEtiqueta()
                arbol.addc3d(f"goto .{etiqueta1}")
                condicion.etiquetaTrue = ""
                condicion.etiquetaFalse = etiqueta1
            elif condicion.temporalAnterior == "1":
                etiqueta1 = tabla.getEtiqueta()
                arbol.addc3d(f"goto .{etiqueta1}")
                condicion.etiquetaTrue = etiqueta1
                condicion.etiquetaFalse = ""

            etiquetaFin = tabla.getEtiqueta()
            condicion.imprimirEtiquetDestino(arbol, condicion.etiquetaTrue)

            # Se traducen todas las instrucciones dentro del if
            for i in self.instrucciones:
                i.traducir(tabla, arbol)
            arbol.addc3d(f"goto .{etiquetaFin}")
            condicion.imprimirEtiquetDestino(arbol, condicion.etiquetaFalse)

            # Elsif
            # Se traducen todas las instrucciones dentro del elsif
            etiquetasSalida = []
            for elseif in self.l_if:
                resultado = elseif.traducir(tabla, arbol)
                etiquetasSalida.append(resultado.temporalAnterior)

            arbol.addc3d(f"label .{etiquetaFin}")
            # Se agregan las etiquetas de salida de los elsif
            for etiqueta in etiquetasSalida:
                arbol.addc3d(etiqueta)

        # If ... Elsif ... Else
        elif len(self.l_if) > 0 and len(self.instrucciones_else) > 0:
            if condicion.temporalAnterior == "0":
                etiqueta1 = tabla.getEtiqueta()
                arbol.addc3d(f"goto .{etiqueta1}")
                condicion.etiquetaTrue = ""
                condicion.etiquetaFalse = etiqueta1
            elif condicion.temporalAnterior == "1":
                etiqueta1 = tabla.getEtiqueta()
                arbol.addc3d(f"goto .{etiqueta1}")
                condicion.etiquetaTrue = etiqueta1
                condicion.etiquetaFalse = ""

            etiquetaFin = tabla.getEtiqueta()
            condicion.imprimirEtiquetDestino(arbol, condicion.etiquetaTrue)

            # Se traducen todas las instrucciones dentro del if
            for i in self.instrucciones:
                i.traducir(tabla, arbol)
            arbol.addc3d(f"goto .{etiquetaFin}")
            condicion.imprimirEtiquetDestino(arbol, condicion.etiquetaFalse)

            # Elsif
            # Se traducen todas las instrucciones dentro del elsif
            etiquetasSalida = []
            for elseif in self.l_if:
                resultado = elseif.traducir(tabla, arbol)
                etiquetasSalida.append(resultado.temporalAnterior)

            # Else
            # Se traducen todas las instrucciones dentro del else
            for i in self.instrucciones_else:
                i.traducir(tabla, arbol)

            arbol.addc3d(f"label .{etiquetaFin}")
            # Se agregan las etiquetas de salida de los elsif
            for etiqueta in etiquetasSalida:
                arbol.addc3d(etiqueta)

        return retorno
예제 #19
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)
예제 #20
0
파일: Switch.py 프로젝트: sandymerida/tytus
    def traducir(self, tabla:Tabla, arbol:Arbol):
        super().traducir(tabla,arbol)
        arbol.addc3d("# Inicia Case")
        etiquetasSalida = []
        for caso in self.lista_case:
            if len(caso.expresion2) == 1:
                relacional = Relacional(self.expresion1, caso.expresion2[0], "=", "", self.linea, self.columna)
                condicion = relacional.traducir(tabla, arbol)
                if condicion.temporalAnterior == "0":
                    etiqueta1 = tabla.getEtiqueta()
                    arbol.addc3d(f"goto .{etiqueta1}")
                    condicion.etiquetaTrue = ""
                    condicion.etiquetaFalse = etiqueta1
                elif condicion.temporalAnterior == "1":
                    etiqueta1 = tabla.getEtiqueta()
                    arbol.addc3d(f"goto .{etiqueta1}")
                    condicion.etiquetaTrue = etiqueta1
                    condicion.etiquetaFalse = ""

                etiquetaFin = tabla.getEtiqueta()
                condicion.imprimirEtiquetDestino(arbol, condicion.etiquetaTrue)
                
                # Se traducen todas las funciones dentro del case
                caso.traducir(tabla, arbol)

                arbol.addc3d(f"goto .{etiquetaFin}")
                condicion.imprimirEtiquetDestino(arbol, condicion.etiquetaFalse)
                etiquetasSalida.append(f"label .{etiquetaFin}") 
            else:
                for expre in caso.expresion2:
                    relacional = Relacional(self.expresion1, expre, "=", "", self.linea, self.columna)
                    condicion = relacional.traducir(tabla, arbol)
                    if condicion.temporalAnterior == "0":
                        etiqueta1 = tabla.getEtiqueta()
                        arbol.addc3d(f"goto .{etiqueta1}")
                        condicion.etiquetaTrue = ""
                        condicion.etiquetaFalse = etiqueta1
                    elif condicion.temporalAnterior == "1":
                        etiqueta1 = tabla.getEtiqueta()
                        arbol.addc3d(f"goto .{etiqueta1}")
                        condicion.etiquetaTrue = etiqueta1
                        condicion.etiquetaFalse = ""

                    etiquetaFin = tabla.getEtiqueta()
                    condicion.imprimirEtiquetDestino(arbol, condicion.etiquetaTrue)
                    
                    # Se traducen todas las funciones dentro del case
                    caso.traducir(tabla, arbol)

                    arbol.addc3d(f"goto .{etiquetaFin}")
                    condicion.imprimirEtiquetDestino(arbol, condicion.etiquetaFalse)
                    etiquetasSalida.append(f"label .{etiquetaFin}") 
               
        if len(self.instrucciones_else) != 0:
            # Se traducen todas las instrucciones dentro del else
            for i in self.instrucciones_else:
                i.traducir(tabla, arbol)
        
        # Se agregan las etiquetas de salida de los elsif
        for etiqueta in etiquetasSalida:
            arbol.addc3d(etiqueta)
예제 #21
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)
예제 #22
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)