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