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)
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
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)
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 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)
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
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")
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")
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
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)
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()
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)