コード例 #1
0
 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()
コード例 #2
0
    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()
コード例 #3
0
ファイル: gui.py プロジェクト: edgarJ91/tytus
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
コード例 #4
0
ファイル: principal.py プロジェクト: gpeitzner/OLC2_P2
 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.")
コード例 #5
0
 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.")
コード例 #6
0
ファイル: gui.py プロジェクト: edgarJ91/tytus
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
コード例 #7
0
    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()