def run(self, entrada): self.cola = Cola() self.g.errores.errores.clear() self.g.repgramatical = {} self.main = g.parse(entrada) self.salida = "" self.id_debug = 0 self.tablasimbolos = TABLASIMBOLOS.TablaDeSimbolos({}) self.procesar_main()
def debugger(self): self.tableWidget.setRowCount(0) self.tableWidget.setRowCount(100) self.tableWidget.setItem(0, 0, QTableWidgetItem("No.")) self.tableWidget.setItem(0, 1, QTableWidgetItem("Simbolo")) self.tableWidget.setItem(0, 2, QTableWidgetItem("Valor")) if (self.hilo_terminado): sys.setrecursionlimit(2147483644) self.consola.clear() ReporteErrores.func(None, True) g.func(0, None) texto = analizar(self.editor.text()) self.gramatica = getGrammar() self.simbolos = getSimbols() g.textoEntrada = texto instrucciones = g.parse(texto) self.instrucciones = instrucciones ts_global = TS.Entorno(None) ast = AST.AST(instrucciones) declaracion1 = Declaracion.Declaracion('$ra', 0, 0, 0, "", "GLOBAL") declaracion2 = Declaracion.Declaracion('$sp', 0, 0, 0, "", "GLOBAL") declaracion1.ejecutar(ts_global, ast, self, True) declaracion2.ejecutar(ts_global, ast, self, True) bandera = False if (instrucciones != None): for ins in instrucciones: try: if (bandera == False and ins.id != "main"): error = Error.Error( "SEMANTICO", "Error semantico, La primera etiqueta debe ser la etiqueta main:", ins.linea, ins.columna) ReporteErrores.func(error) break else: bandera = True if (ast.existeEtiqueta(ins)): error = Error.Error( "SEMANTICO", "Error semantico, Ya existe la etiqueta " + ins.id, ins.linea, ins.columna) ReporteErrores.func(error) else: ast.agregarEtiqueta(ins) except: pass self.ts_global = ts_global self.ast = ast self.listado_gramatical = g.func(1, None).copy() self.debug()
def scan1(self): inputValue = self.tex.get("1.0", "end-1c") tkinter.messagebox.showwarning(title=None, message=inputValue) # asc.texto = inputValue.lower() asc.texto = "CREATE DATABASE casa" sentencias = asc.parse(inputValue) self.sentencias = sentencias tkinter.messagebox.showwarning(title=None, message="1 asc") Ent = Entorno.Entorno(None) ast = Ast.Ast(sentencias) bandera = False if (sentencias != None): for x in sentencias: try: a = True if (ast.exist_label(x)): valueaagregar = Error("SEMANTICO", "Ya existe la variable " + x.value, x.line, x.column) Reporte.agregar(valueaagregar) else: ast.agregarlabel(x) except: pass tkinter.messagebox.showwarning(title=None, message="2") A = ast.getlabels() if (A != None): for W in A: try: if (W.ejecutar(Ent, ast) == True): break except: pass else: valueaagregar = Error("SEMANTICO", "Arbol vacio para compilar ", 0, 0) Reporte.agregar(valueaagregar) self.ent = Ent self.ast = ast
def ejecutarAscendente(self): self.erroresLexicos = [] self.erroresSintacticos = [] self.generador = None self.instrucciones = None if self.textEdit.toPlainText(): self.plainTextEdit.appendPlainText("\n[MINOR.C] ascendente.py " + self.label.text()) import ascendente as ascendente self.instrucciones = ascendente.parse(self.textEdit.toPlainText(), self.erroresLexicos, self.erroresSintacticos, self.plainTextEdit) if self.instrucciones: self.plainTextEdit.appendPlainText( "[MINOR.C] tres_direcciones.py ascendente.out") try: self.generador = tres_direcciones.TresDirecciones( self.plainTextEdit, self.instrucciones) self.generador.generar_codigo() if not self.generador.detener_ejecucion: self.plainTextEdit.appendPlainText( "[AUGUS] ascendente_augus.py tres_direcciones.out") import ascendente_augus as ascendente_augus instrucciones_augus = ascendente_augus.parse( self.generador.codigo3d, [], [], self.plainTextEdit) if instrucciones_augus: self.plainTextEdit.appendPlainText( "[AUGUS] interprete.py ascendente_augus.out\n\n" ) try: interpretacion_augus = interprete.Interprete( self.plainTextEdit) interpretacion_augus.procesar( instrucciones_augus) except Exception as ex: print(ex) self.plainTextEdit.appendPlainText( "[AUGUS] ERROR: Error de ejecución.") except Exception as ex: print(ex) self.plainTextEdit.appendPlainText( "[MINOR.C] ERROR: Error de ejecución.")
def ejecutarAscendente(self): self.erroresLexicos = [] self.erroresSintacticos = [] self.interpretacion = None self.instrucciones = None if self.textEdit.toPlainText(): self.plainTextEdit.appendPlainText("\nascendente.py " + self.label.text()) import ascendente as ascendente instrucciones = ascendente.parse(self.textEdit.toPlainText(), self.erroresLexicos, self.erroresSintacticos, self.plainTextEdit) if instrucciones: self.plainTextEdit.appendPlainText( "interprete.py ascendente.out\n\n") try: self.interpretacion = interprete.Interprete( self.plainTextEdit) self.interpretacion.procesar(instrucciones) self.instrucciones = instrucciones except: self.plainTextEdit.appendPlainText( "ERROR: Error de ejecución.")
def scan1(self): SentenciasR = Sentencias.ReporteD() SentenciasR.Abrir() ast = [] Ent = [] execr = N.Nodo() execr.start() inputValue=self.tex.get("1.0","end-1c") tkinter.messagebox.showwarning(title=None, message=inputValue) # asc.texto = inputValue.lower() asc.texto ="CREATE DATABASE casa" sentencias = asc.parse(inputValue) self.sentencias = sentencias #tkinter.messagebox.showwarning(title=None, message="1 asc") Ent = Entorno.Entorno(None) print("recorrera") ast = Ast.Ast(sentencias) bandera = False if(sentencias != None): for x in sentencias: try: a = True print("testeara --- ") print(x.id) if(ast.exist_label(x)): print("Ya existe la variable ") print("Ya existe la variable ",x.id) valueaagregar = Datos("SEMANTICO","Ya existe la variable "+x.id,x.line,x.column) Reporte.agregar(valueaagregar) else: print("testeara -exist_label ") print(x.id) ast.agregarlabel(x) except: pass #tkinter.messagebox.showwarning(title=None, message="2") print("parseara") A = ast.getlabels() if(A != None): print("1 ") for W in A: try: print("ejecutara2 ---------------------- ", W) except: pass for W in A: try: print("ejecutara ---------------------- ", W) print("2 ") print("3 ") try: W.ejecutar(Ent,ast) print("4b ") except: print("3b ") pass except: pass print("4 ") else: valueaagregar = Datos("SEMANTICO","Arbol vacio para compilar ",0,0) Reporte.agregar(valueaagregar) self.ent = Ent self.ast = ast
def ascendente(self): sys.setrecursionlimit(2147483644) self.consola.clear() global codigoAug ReporteErrores.func(None,True) g.textoEntrada = codigoAug g.func(0,None) instrucciones = g.parse(codigoAug) self.instrucciones = instrucciones ts_global = TS.Entorno(None) ts_global.asignarConsola(self.consola) ast = AST.AST(instrucciones) declaracion1 = Declaracion.Declaracion('$ra',0,0,0,"","GLOBAL") declaracion2 = Declaracion.Declaracion('$sp',0,0,0,"","GLOBAL") declaracion1.ejecutar(ts_global,ast,self,False) declaracion2.ejecutar(ts_global,ast,self,False) #PRIMERA PASADA PARA GUARDAR TODAS LAS ETIQUETAS bandera = False if(instrucciones != None): for ins in instrucciones: try: if(bandera == False and ins.id != "main"): error = Error.Error("SEMANTICO","Error semantico, La primera etiqueta debe ser la etiqueta main:",ins.linea,ins.columna) ReporteErrores.func(error) break else: bandera = True if(ast.existeEtiqueta(ins)): error = Error.Error("SEMANTICO","Error semantico, Ya existe la etiqueta "+ins.id,ins.linea,ins.columna) ReporteErrores.func(error) else: ast.agregarEtiqueta(ins) except: pass main = ast.obtenerEtiqueta("main") if(main != None): salir = False for ins in main.instrucciones: try: if(isinstance(ins,Asignacion.Asignacion) or isinstance(ins,Conversion.Conversion)): ins.setAmbito("main") if(ins.ejecutar(ts_global,ast,self,False) == True): salir = True break except: pass if(not salir): siguiente = ast.obtenerSiguienteEtiqueta("main") if(siguiente!=None): siguiente.ejecutar(ts_global,ast,self,False) else: error = Error.Error("SEMANTICO","Error semantico, No puede iniciarse el programa ya que no existe la etiqueta main:",0,0) ReporteErrores.func(error) listado = ReporteErrores.func(None) if(len(listado)>0): QMessageBox.critical(self.centralwidget, "Errores en Ejecución", "Se obtuvieron errores en la ejecución del Código Ingresado, verifique reporte de Errores") self.ts_global = ts_global self.ast = ast self.listado_gramatical = g.func(1,None).copy()