Ejemplo n.º 1
0
    def ejecutar_analisis(self):

        #self.consola.setText("****** Preparando Analisis ******")
        self.consola.clear()
        indextab = self.editores.tabText(self.editores.currentIndex())
        ##self.consola.setText("Archivo a analizar: "+indextab)
        tab = self.editores.widget(self.editores.currentIndex())
        items = tab.children()
        codigo = items[0].toPlainText()
        ast = None
        analisis_semantico = False
        lst = []
        print(
            "___________INICIA PROCESO DE ANALISIS LEXICO Y SINTACTICO_______________"
        )
        try:
            if self.analizador_cambiado:
                gramaticaD.lst_errores = []
                ast = gramaticaD.parse(codigo)
                arbolparser = GramaticaDG.parse(codigo)
                graficaAST = GraficarArbol(args=(arbolparser,
                                                 "ASPDescendente"),
                                           daemon=True)
                graficaAST.start()
                graficaGramatical = GraficarGramatica(
                    args=(gramaticaD.lstGrmaticales, "ReporteGramatical"),
                    daemon=True)
                graficaGramatical.start()
                lst = gramaticaD.lst_errores
                gramaticaD.lstGrmaticales = []
            else:
                gramatica.lst_errores = []
                ast2 = gramatica.parse(codigo)
                ast = ast2.instruccion

                graficaAST = GraficarArbol(args=(ast2.nodo, "ASPAscendente"),
                                           daemon=True)
                graficaAST.start()
                graficaGramatical = GraficarGramatica(
                    args=(gramatica.lstGrmaticales, "ReporteGramatical"),
                    daemon=True)
                graficaGramatical.start()
                gramatica.lstGrmaticales = []
                lst = gramatica.lst_errores
        except:
            self.consola.append(
                "/\\/\\/\\/\\/\\ERROR DE LEXICO, SINTACTICO/\\/\\/\\/\\")
            self.consola.append("REVISAR REPORTE DE ERRORES")
        finally:
            if not self.analizador_cambiado:
                gramatica.graficarErrores()
            else:
                gramaticaD.graficarErrores()

        ts = TablaSimbolos()

        global in_console
        if self.debug_mode:
            in_console = Debuger(args=(ast if (ast != None) else ast, ts, lst,
                                       "", items[0], self.consola, self.GTS),
                                 daemon=True)
        else:
            in_console = Ejecutor(args=(ast if (ast != None) else ast, ts, lst,
                                        "", items[0], self.consola, self.GTS),
                                  daemon=True)
        if ast != None:
            try:
                print(
                    "___________INICIA PROCESO DE ANALISIS SEMANTICO_______________"
                )
                recolector = Recolectar(ast, ts, lst)
                print("******FIN CONSTRUCTOR**********")
                recolector.procesar()
                recolector.getErrores()
                print("******FIN RECOLECCION*******")
                print("********** FIN DE CONSTRUCTOR ********")
                in_console.start()
            except:
                self.consola.append(
                    "/\\/\\/\\/\\/\\ERROR DE EJECUCION/\\/\\/\\/\\")
                self.consola.append("REVISAR REPORTE DE ERRORES")
        ts.graficarSimbolos()