Exemple #1
0
    def traducir(self, ent, arbol, ventana):
        condicion3D = self.condicion.traducir(ent, arbol, ventana)
        if (condicion3D == None): return None
        if (condicion3D.codigo3D != ""):
            ventana.editor.append("\n" + condicion3D.codigo3D)
        etiquetaSalida = temp.etiqueta()
        etiquetaDefault = temp.etiqueta()
        temp.listaBreak(0, etiquetaSalida)

        listaElseIf = []
        #SE CARGAN LAS ETIQUETAS DE LOS CASE Y SE IMPRIMEN LAS CONDICIONES
        for ins in self.lista_case:
            etiquetaTrueElseIf = temp.etiqueta()
            resultConditionElseIf = ins.condicion.traducir(ent, arbol, ventana)
            if (resultConditionElseIf == None): return None
            if (resultConditionElseIf.codigo3D != ""):
                ventana.editor.append("\n" + resultConditionElseIf.codigo3D)
            ventana.editor.append("\n" + "if(" +
                                  condicion3D.temporal.utilizar() + "==" +
                                  resultConditionElseIf.temporal.utilizar() +
                                  ") goto " + etiquetaTrueElseIf + ";")
            listaElseIf.append(etiquetaTrueElseIf)

        if (self.default != None):
            ventana.editor.append("\n" + "goto " + etiquetaDefault + ";")
        else:
            ventana.editor.append("\n" + "goto " + etiquetaSalida + ";")

        contador = 0
        for ins in self.lista_case:
            tsElseIf = TS.Entorno(ent)
            ventana.editor.append("\n" + listaElseIf[contador] + ":")
            for inss in ins.instrucciones:
                try:
                    inss.traducir(tsElseIf, arbol, ventana)
                except:
                    pass
            #ventana.editor.append("\n"+"goto "+etiquetaSalida+";")
            contador = contador + 1
            arbol.entornoGlobal.tabla = {
                **tsElseIf.tabla,
                **arbol.entornoGlobal.tabla
            }

        if (self.default != None):
            ventana.editor.append("\n" + etiquetaDefault + ":")
            entDefault = TS.Entorno(ent)
            for ins in self.default.instrucciones:
                try:
                    ins.traducir(entDefault, arbol, ventana)
                except:
                    pass
            arbol.entornoGlobal.tabla = {
                **entDefault.tabla,
                **arbol.entornoGlobal.tabla
            }

        ventana.editor.append("\n" + etiquetaSalida + ":")
        temp.listaBreak(2, etiquetaSalida)
Exemple #2
0
    def traducir(self, ent, arbol, ventana):
        condicion3D = self.condicion.traducir(ent, arbol, ventana)
        if (condicion3D == None): return None
        etiquetaWhile = temp.etiqueta()
        etiquetaSalida = temp.etiqueta()

        temp.listaContinue(0, etiquetaWhile)
        temp.listaBreak(0, etiquetaSalida)

        ventana.editor.append("\n" + etiquetaWhile + ":")
        tsWhile = TS.Entorno(ent)
        for ins in self.instrucciones:
            try:
                ins.traducir(tsWhile, arbol, ventana)
            except:
                pass

        if (condicion3D.codigo3D != ""):
            ventana.editor.append("\n" + condicion3D.codigo3D)
        ventana.editor.append("\n" + "if(" + condicion3D.temporal.utilizar() +
                              ") goto " + etiquetaWhile + ";")

        ventana.editor.append("\n" + etiquetaSalida + ":")

        temp.listaContinue(2, etiquetaWhile)
        temp.listaBreak(2, etiquetaSalida)
        arbol.entornoGlobal.tabla = {
            **tsWhile.tabla,
            **arbol.entornoGlobal.tabla
        }
Exemple #3
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()
Exemple #4
0
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
Exemple #5
0
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
Exemple #6
0
 def inicializar(self,ent,arbol,ventana):
     self.entorno = TS.Entorno(ent)
     self.temporales = []    
     for parametro in self.parametros:
         temporal = parametro.traducir(self.entorno,arbol,ventana)
         if(temporal != None): self.temporales.append(temporal)
Exemple #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()
Exemple #8
0
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(1011, 738)
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.frameCodigo = QtWidgets.QFrame(self.centralwidget)
        self.frameCodigo.setGeometry(QtCore.QRect(0, 30, 661, 471))
        self.frameCodigo.setFrameShape(QtWidgets.QFrame.StyledPanel)
        self.frameCodigo.setFrameShadow(QtWidgets.QFrame.Raised)
        self.frameCodigo.setObjectName("frameCodigo")
        self.scrollDebug = QtWidgets.QScrollArea(self.centralwidget)
        self.scrollDebug.setGeometry(QtCore.QRect(660, 30, 341, 471))
        self.scrollDebug.setWidgetResizable(False)
        self.scrollDebug.setObjectName("scrollDebug")
        self.scrollAreaWidgetContents = QtWidgets.QWidget()
        self.scrollAreaWidgetContents.setGeometry(QtCore.QRect(0, 0, 339, 469))
        self.scrollAreaWidgetContents.setObjectName("scrollAreaWidgetContents")
        self.tableWidget = QtWidgets.QTableWidget(self.scrollAreaWidgetContents)
        self.tableWidget.setGeometry(QtCore.QRect(0, 0, 341, 471))
        self.tableWidget.setObjectName("tableWidget")
        self.tableWidget.setColumnCount(0)
        self.tableWidget.setRowCount(0)
        self.scrollDebug.setWidget(self.scrollAreaWidgetContents)
        self.frameConsola = QtWidgets.QFrame(self.centralwidget)
        self.frameConsola.setGeometry(QtCore.QRect(0, 500, 1011, 211))
        self.frameConsola.setAutoFillBackground(True)
        self.frameConsola.setFrameShape(QtWidgets.QFrame.StyledPanel)
        self.frameConsola.setFrameShadow(QtWidgets.QFrame.Raised)
        self.frameConsola.setObjectName("frameConsola")
        self.consola = QtWidgets.QPlainTextEdit(self.frameConsola)
        self.consola.setGeometry(QtCore.QRect(10, 0, 991, 211))
        font = QtGui.QFont()
        font.setFamily("Consolas")
        font.setPointSize(11)
        font.setBold(True)
        font.setWeight(75)
        font.setKerning(True)


        font2 = QtGui.QFont()
        font2.setFamily("Consolas")
        font2.setPointSize(13)
        font2.setBold(True)
        font2.setWeight(100)
        font2.setKerning(True)


        self.consola.setFont(font2)
        self.consola.setAutoFillBackground(False)
        #self.consola.setTextFormat(QtCore.Qt.RichText)
        self.consola.setObjectName("consola")
        self.frame = QtWidgets.QFrame(self.centralwidget)
        self.frame.setGeometry(QtCore.QRect(-1, 0, 1001, 31))
        self.frame.setFrameShape(QtWidgets.QFrame.StyledPanel)
        self.frame.setFrameShadow(QtWidgets.QFrame.Raised)
        self.frame.setObjectName("frame")
        MainWindow.setCentralWidget(self.centralwidget)
        self.menubar = QtWidgets.QMenuBar(MainWindow)
        self.menubar.setGeometry(QtCore.QRect(0, 0, 1011, 21))
        self.menubar.setObjectName("menubar")
        self.menuArchivo = QtWidgets.QMenu(self.menubar)
        self.menuArchivo.setObjectName("menuArchivo")
        self.menuPrograma = QtWidgets.QMenu(self.menubar)
        self.menuPrograma.setObjectName("menuPrograma")
        self.menuReportes = QtWidgets.QMenu(self.menubar)
        self.menuReportes.setObjectName("menuReportes")
        self.menuAyuda = QtWidgets.QMenu(self.menubar)
        self.menuAyuda.setObjectName("menuAyuda")
        self.menuAugus = QtWidgets.QMenu(self.menubar)
        self.menuAugus.setObjectName("menuAugus")
        self.menuCMinor = QtWidgets.QMenu(self.menubar)
        self.menuCMinor.setObjectName("menuCMinor")
        self.menuReportesC = QtWidgets.QMenu(self.menubar)
        self.menuReportesC.setObjectName("menuReportesC")
        MainWindow.setMenuBar(self.menubar)
        self.statusbar = QtWidgets.QStatusBar(MainWindow)
        self.statusbar.setObjectName("statusbar")
        MainWindow.setStatusBar(self.statusbar)
        self.actionNuevo = QtWidgets.QAction(MainWindow)
        self.actionNuevo.setObjectName("actionNuevo")
        self.actionArbir = QtWidgets.QAction(MainWindow)
        self.actionArbir.setObjectName("actionArbir")
        self.actionGuardar = QtWidgets.QAction(MainWindow)
        self.actionGuardar.setObjectName("actionGuardar")
        self.actionGuardar_Como = QtWidgets.QAction(MainWindow)
        self.actionGuardar_Como.setObjectName("actionGuardar_Como")
        self.actionCerrrar = QtWidgets.QAction(MainWindow)
        self.actionCerrrar.setObjectName("actionCerrrar")
        self.actionSalir = QtWidgets.QAction(MainWindow)
        self.actionSalir.setObjectName("actionSalir")
        self.actionCopiar = QtWidgets.QAction(MainWindow)
        self.actionCopiar.setObjectName("actionCopiar")
        self.actionPegar = QtWidgets.QAction(MainWindow)
        self.actionPegar.setObjectName("actionPegar")
        self.actionCortar = QtWidgets.QAction(MainWindow)
        self.actionCortar.setObjectName("actionCortar")
        self.actionBuscar = QtWidgets.QAction(MainWindow)
        self.actionBuscar.setObjectName("actionBuscar")
        self.actionReemplazar = QtWidgets.QAction(MainWindow)
        self.actionReemplazar.setObjectName("actionReemplazar")
        self.actionEjecutar_Descendente = QtWidgets.QAction(MainWindow)
        self.actionEjecutar_Descendente.setObjectName("actionEjecutar_Descendente")
        self.actionEjecutar_Ascendente = QtWidgets.QAction(MainWindow)
        self.actionEjecutar_Ascendente.setObjectName("actionEjecutar_Ascendente")
        self.actionEjecutar_Paso_a_Paso_Ascendente = QtWidgets.QAction(MainWindow)
        self.actionEjecutar_Paso_a_Paso_Ascendente.setObjectName("actionEjecutar_Paso_a_Paso_Ascendente")
        self.actionTabla_de_Simbolos = QtWidgets.QAction(MainWindow)
        self.actionTabla_de_Simbolos.setObjectName("actionTabla_de_Simbolos")
        self.actionErrores = QtWidgets.QAction(MainWindow)
        self.actionErrores.setObjectName("actionErrores")
        self.actionAST = QtWidgets.QAction(MainWindow)
        self.actionAST.setObjectName("actionAST")
        self.actionGramatical = QtWidgets.QAction(MainWindow)
        self.actionGramatical.setObjectName("actionGramatical")

        self.actionAyuda = QtWidgets.QAction(MainWindow)
        self.actionAyuda.setObjectName("actionAyuda")
        self.actionAcercaDe = QtWidgets.QAction(MainWindow)
        self.actionAcercaDe.setObjectName("actionAcercaDe")

        self.actionTabla_de_Simbolos2 = QtWidgets.QAction(MainWindow)
        self.actionTabla_de_Simbolos2.setObjectName("actionTabla_de_Simbolos2")
        self.actionErrores2 = QtWidgets.QAction(MainWindow)
        self.actionErrores2.setObjectName("actionErrores2")
        self.actionAST2 = QtWidgets.QAction(MainWindow)
        self.actionAST2.setObjectName("actionAST2")
        self.actionGramatical2 = QtWidgets.QAction(MainWindow)
        self.actionGramatical2.setObjectName("actionGramatical2")
        self.actionOpt2 = QtWidgets.QAction(MainWindow)
        self.actionOpt2.setObjectName("actionOpt2")
        self.actionGDA = QtWidgets.QAction(MainWindow)
        self.actionGDA.setObjectName("actionGDA")


        self.actionCompilarC = QtWidgets.QAction(MainWindow)
        self.actionCompilarC.setObjectName("CompilarC")
        self.actionCargarC = QtWidgets.QAction(MainWindow)
        self.actionCargarC.setObjectName("CargarC")
        self.actionCargarA = QtWidgets.QAction(MainWindow)
        self.actionCargarA.setObjectName("CargarA")


        self.menuArchivo.addAction(self.actionNuevo)
        self.menuArchivo.addSeparator()
        self.menuArchivo.addAction(self.actionArbir)
        self.menuArchivo.addAction(self.actionGuardar)
        self.menuArchivo.addAction(self.actionGuardar_Como)
        self.menuArchivo.addSeparator()
        self.menuArchivo.addAction(self.actionCerrrar)
        self.menuArchivo.addAction(self.actionSalir)
        self.menuAugus.addAction(self.actionEjecutar_Descendente)
        self.menuAugus.addSeparator()
        self.menuAugus.addAction(self.actionEjecutar_Ascendente)
        self.menuAugus.addAction(self.actionEjecutar_Paso_a_Paso_Ascendente)
        self.menuReportes.addAction(self.actionTabla_de_Simbolos)
        self.menuReportes.addAction(self.actionErrores)
        self.menuReportes.addAction(self.actionAST)
        self.menuReportes.addAction(self.actionGramatical)

        self.menuReportesC.addAction(self.actionTabla_de_Simbolos2)
        self.menuReportesC.addAction(self.actionErrores2)
        self.menuReportesC.addAction(self.actionAST2)
        self.menuReportesC.addAction(self.actionGramatical2)
        self.menuReportesC.addAction(self.actionOpt2)
        self.menuReportesC.addAction(self.actionGDA)

        self.menuCMinor.addAction(self.actionCompilarC)
        self.menuCMinor.addAction(self.actionCargarC)
        self.menuCMinor.addAction(self.actionCargarA)

        self.menuAyuda.addAction(self.actionAyuda)
        self.menuAyuda.addAction(self.actionAcercaDe)
        self.menubar.addAction(self.menuArchivo.menuAction()) 
        self.menubar.addAction(self.menuAugus.menuAction())
        self.menubar.addAction(self.menuReportes.menuAction())
        self.menubar.addAction(self.menuCMinor.menuAction())
        self.menubar.addAction(self.menuReportesC.menuAction())
        self.menubar.addAction(self.menuAyuda.menuAction())


        self.__myFont = QFont()
        self.__myFont.setPointSize(12)
        #************************************************ REGLAS DEL LENGUAJE AUGUS *****************************************
        self.editor = QsciScintilla()
        self.editor.setText("")              
        self.editor.setLexer(None)           
        self.editor.setUtf8(True)             
        self.editor.setFont(self.__myFont)    

        #AJUSTES DE TEXTO
        self.editor.setWrapMode(QsciScintilla.WrapWord)
        self.editor.setWrapVisualFlags(QsciScintilla.WrapFlagByText)
        self.editor.setWrapIndentMode(QsciScintilla.WrapIndentIndented)

        #FIN DE LINEA
        self.editor.setEolMode(QsciScintilla.EolWindows)
        self.editor.setEolVisibility(False)

        #SANGRIA
        self.editor.setIndentationsUseTabs(False)
        self.editor.setTabWidth(4)
        self.editor.setIndentationGuides(True)
        self.editor.setTabIndents(True)
        self.editor.setAutoIndent(True)

        self.editor.setCaretForegroundColor(QColor("#ff0000ff"))
        self.editor.setCaretLineVisible(True)
        self.editor.setCaretLineBackgroundColor(QColor("#1f0000ff"))
        self.editor.setCaretWidth(2)

        # MARGENES
        self.editor.setMarginType(0, QsciScintilla.NumberMargin)
        self.editor.setMarginWidth(0, "0000")  #con este se puede quitar la linea
        self.editor.setMarginsForegroundColor(QColor("#ff888888"))

        #SE COLOCAN LAS REGLAS DEL EDITOR
        self.__lexer = QsciLexerRuby(self.editor)
        self.editor.setLexer(self.__lexer)

        self.__lyt = QVBoxLayout()
        self.frameCodigo.setLayout(self.__lyt)
        self.__lyt.addWidget(self.editor)

        self.retranslateUi(MainWindow)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)
        self.actionNuevo.triggered.connect(self.clean)
        self.actionArbir.triggered.connect(self.open)
        self.actionGuardar.triggered.connect(self.save)
        self.actionGuardar_Como.triggered.connect(self.save_as)
        self.actionCerrrar.triggered.connect(self.clear)
        self.actionSalir.triggered.connect(self.exit)
        self.ruta_archivo  = None
        self.actionEjecutar_Ascendente.triggered.connect(self.ascendente)
        self.actionEjecutar_Descendente.triggered.connect(self.descendente)
        self.actionTabla_de_Simbolos.triggered.connect(self.generarTabla)
        self.actionErrores.triggered.connect(self.generarRErrores)
        self.actionGramatical.triggered.connect(self.generarRGramatical)
        self.actionAST.triggered.connect(self.generarAST)

        self.actionCompilarC.triggered.connect(self.compilar)
        self.actionCargarA.triggered.connect(self.setAugus) 
        self.actionCargarC.triggered.connect(self.setCMinor)


        self.actionErrores2.triggered.connect(self.generarRErroresC)
        self.actionAST2.triggered.connect(self.generarASTC)
        self.actionGramatical2.triggered.connect(self.generarGramaticalC)
        self.actionGDA.triggered.connect(self.generarGDAC)
        self.actionOpt2.triggered.connect(self.generarOptC)
        self.actionTabla_de_Simbolos2.triggered.connect(self.generarRTSC)

        self.actionAcercaDe.triggered.connect(self.acercade)
        self.actionAyuda.triggered.connect(self.ayuda)

        self.ts_global = TS.Entorno(None)
        self.ast =  AST.AST([]) 
        self.listado_gramatical = []
        self.instrucciones = []
        self.hilo_terminado = True
        self.actionEjecutar_Paso_a_Paso_Ascendente.triggered.connect(self.debugger)


        self.tableWidget.setRowCount(100)
        self.tableWidget.setColumnCount(3)
        self.tableWidget.setItem(0,0, QTableWidgetItem("No."))
        self.tableWidget.setItem(0,1, QTableWidgetItem("Simbolo"))
        self.tableWidget.setItem(0, 2 , QTableWidgetItem("Valor"))

        self.tableWidget.setColumnWidth(0, 10)
        self.tableWidget.setColumnWidth(1, 75)
        self.tableWidget.setColumnWidth(2, 175)

        self.consola.setStyleSheet("background-color: black;border: 1px solid black;color:green;") 
Exemple #9
0
    def traduccion(self):
        if self.codigo.text() == "":
            return 

        self.editor.setText("")
        sys.setrecursionlimit(2147483644)
        self.consola.clear()
        ReporteErrores.func(None,True)
        g.textoEntrada = self.codigo.text()
        g.func(0,None)
        instrucciones = g.parse(self.codigo.text())
        self.instrucciones = instrucciones
        ts_global = TS.Entorno(None)
        ast = AST.AST(instrucciones) 
        temp.temporal(True)
        temp.parametro(True)
        temp.etiqueta(True)
        temp.listaContinue(-1,None)
        temp.listaBreak(-1,None)
        temp.listaReturn(-1,None)
        temp.listaLLamada(-1,None)
        temp.listaRecusion(-1,None)

        #PRIMERA PASADA PARA GUARDAR TODAS LAS FUNCIONES Y STRUCTS
        if(instrucciones != None):
            for ins in instrucciones:
                try:
                    if(isinstance(ins,Funcion)): 
                        if(ast.existeEtiqueta(ins)):
                            error = Error.Error("SEMANTICO","Error semantico, Ya existe la funcion "+ins.id,ins.linea,ins.columna)
                            ReporteErrores.func(error)
                        else:
                            if(ins.id != "main"):
                                ins.inicializar(ts_global,ast,self)
                            ast.agregarEtiqueta(ins)
                    elif(isinstance(ins,Struct)):
                        if(ast.existeStruct(ins)):
                            error = Error.Error("SEMANTICO","Error semantico, Ya existe el Struct "+ins.id,ins.linea,ins.columna)
                            ReporteErrores.func(error)
                        else:
                            ast.agregarStruct(ins)
                except:
                        pass

        #SE TRADUCE EL METODO MAIN
        main = ast.obtenerEtiqueta("main")

        if(main != None):
            self.editor.append("main:")

            #se corren las instrucciones globales
            for ins in instrucciones:
                try:
                    if(not isinstance(ins,Funcion)): 
                        try:
                            ins.traducir(ts_global,ast,self)
                        except:
                            pass
                except:
                        pass
            entMain = TS.Entorno(ts_global)             
            for ins in main.instrucciones:
                try:
                    ins.traducir(entMain,ast,self)
                except:
                    pass
                
            ast.entornoGlobal.tabla = {**entMain.tabla,**ast.entornoGlobal.tabla}
            ast.entornoGlobal.tabla = {**ts_global.tabla,**ast.entornoGlobal.tabla}
        else:
            error = Error.Error("SEMANTICO","Error semantico, No puede iniciarse el programa ya que no existe el metodo main()",0,0)
            ReporteErrores.func(error)
            
        listado = ReporteErrores.func(None)
        if(len(listado)>0):
            QMessageBox.critical(self.centralwidget, "Errores en Traducción", "Se obtuvieron errores en la traducción del Código Ingresado, verifique reporte de Errores de Traducción")

        self.ts_global = ts_global
        self.ast = ast
        self.listado_gramatical = g.func(1,None).copy()
Exemple #10
0
    def traducir(self, ent, arbol, ventana):
        funcion = arbol.obtenerEtiqueta(self.id)
        if (funcion == None):
            error = Error(
                "SEMANTICO",
                "Error semantico, no se encuentra definida una Función con el nombre "
                + self.id, self.linea, self.columna)
            ReporteErrores.func(error)
            return None

        if (len(funcion.parametros) != len(funcion.temporales)):
            error = Error(
                "SEMANTICO",
                "Error semantico, no se encuentra definida una Función con el nombre "
                + self.id, self.linea, self.columna)
            ReporteErrores.func(error)
            return None

        if (len(funcion.parametros) != len(self.expresiones)):
            error = Error(
                "SEMANTICO",
                "Error semantico, El número de parametros no son iguales a los definidos en la función "
                + self.id, self.linea, self.columna)
            ReporteErrores.func(error)
            return None

        enLlamada = TS.Entorno(ent)
        contador = 0
        #funcion.calcularNiveles(funcion.instrucciones)
        #cantidad = temp.listaRecusion(None,None).count(self.id)

        for parametro in funcion.parametros:
            parametro.valor = self.expresiones[contador]
            parametro.temporal = funcion.temporales[contador]
            parametro.traducir(enLlamada, arbol, ventana)
            contador = contador + 1

        #llamadaAnterior = temp.listaLLamada(1,None)
        #recursionAnterior = temp.listaRecusion(1,None)

        #llamadaPrevia = temp.listaLLamada(1,None)
        #if(recursionAnterior==self.id):

        llamadaAnterior = temp.listaLLamada(1, None)  #
        recursionAnterior = temp.listaRecusion(1, None)  #
        # if(cantidad<funcion.nivelesRecursiva):
        #     etiquetaFuncion = temp.etiqueta()
        #     etiquetaSalida = temp.etiqueta()
        #     temp.listaLLamada(0,etiquetaFuncion)
        #     temp.listaRecusion(0,self.id)
        #     funcion.entorno = enLlamada
        #     funcion.etiqueta = etiquetaFuncion
        #     ventana.editor.append("\n"+"goto "+etiquetaFuncion+";")
        #     funcion.traducir(ent,arbol,ventana)
        #     ventana.editor.append("\n"+etiquetaSalida+":")
        #     temp.listaLLamada(2,etiquetaFuncion)
        #     temp.listaRecusion(2,self.id)
        # #else:
        #     if(llamadaPrevia!=None):
        #         if(llamadaAnterior!=llamadaPrevia):
        #             ventana.editor.append("\n"+"goto "+llamadaPrevia+";")

        #    #else:
        #        #ventana.editor.append("\n"+"goto "+llamadaAnterior+";")
        #else:
        if (not recursionAnterior == self.id):
            etiquetaFuncion = temp.etiqueta()
            etiquetaSalida = temp.etiqueta()
            temp.listaLLamada(0, etiquetaFuncion)
            temp.listaRecusion(0, self.id)
            funcion.entorno = enLlamada
            funcion.etiqueta = etiquetaFuncion
            ventana.editor.append("\n" + "goto " + etiquetaFuncion + ";")
            funcion.traducir(ent, arbol, ventana)
            ventana.editor.append("\n" + etiquetaSalida + ":")
            temp.listaLLamada(2, etiquetaFuncion)
            temp.listaRecusion(2, self.id)
        else:  #
            ventana.editor.append("\n" + "goto " + llamadaAnterior + ";")  #

        arbol.entornoGlobal.tabla = {
            **enLlamada.tabla,
            **arbol.entornoGlobal.tabla
        }
Exemple #11
0
    def traducir(self,ent,arbol,ventana):

        tsIf = TS.Entorno(ent)
        resultCondition = self.condicion.traducir(tsIf,arbol,ventana)
        if(resultCondition == None): return None

        etiquetaTrue = temp.etiqueta()
        etiquetaFalse = temp.etiqueta()
        etiquetaSalida = temp.etiqueta()

        if(resultCondition.codigo3D!=""): ventana.editor.append("\n"+resultCondition.codigo3D) 
        
        ventana.editor.append("\n"+"if("+resultCondition.temporal.utilizar()+") goto "+etiquetaTrue+";")
        

        
        listaElseIf = []
        #SE CARGAN LAS ETIQUETAS DEL ELSE IF Y SE IMPRIMEN LAS CONDICIONES
        for ins in self.listaElseIF:
            etiquetaTrueElseIf = temp.etiqueta()
            resultConditionElseIf = ins.condicion.traducir(tsIf,arbol,ventana)
            if(resultConditionElseIf.codigo3D!=""): ventana.editor.append("\n"+resultConditionElseIf.codigo3D) 
            ventana.editor.append("\n"+"if("+resultConditionElseIf.temporal.utilizar()+") goto "+etiquetaTrueElseIf+";")
            listaElseIf.append(etiquetaTrueElseIf)

        if(len(self.instruccionesF)==0 and  len(self.listaElseIF) == 0):
            ventana.editor.append("\n"+"goto "+etiquetaSalida+";")

        if(len(self.instruccionesF)>0 and len(self.listaElseIF) == 0):
            ventana.editor.append("\n"+"goto "+etiquetaFalse+";")

        if(len(self.listaElseIF) > 0):
            ventana.editor.append("\n"+"goto "+etiquetaFalse+";")

        ventana.editor.append("\n"+etiquetaTrue+":")
        for ins in self.instruccionesV:
            try:
                ins.traducir(tsIf,arbol,ventana)
            except:
                pass
        ventana.editor.append("\n"+"goto "+etiquetaSalida+";")

        

        contador = 0
        for ins in self.listaElseIF:
            tsElseIf = TS.Entorno(ent)
            ventana.editor.append("\n"+listaElseIf[contador]+":")
            for inss in ins.instruccionesV:
                try:
                    inss.traducir(tsElseIf,arbol,ventana)
                except:
                    pass
            ventana.editor.append("\n"+"goto "+etiquetaSalida+";")
            contador = contador + 1
            arbol.entornoGlobal.tabla = {**tsElseIf.tabla,**arbol.entornoGlobal.tabla}
            
        if(len(self.instruccionesF)>0 and len(self.listaElseIF) > 0):
            ventana.editor.append("\n"+"goto "+etiquetaFalse+";")

        if(len(self.instruccionesF)>0):
            ventana.editor.append("\n"+etiquetaFalse+":")
            tsElse = TS.Entorno(ent)
            for ins in self.instruccionesF:
                try:
                    ins.traducir(tsElse,arbol,ventana)
                except:
                    pass
            arbol.entornoGlobal.tabla = {**tsElse.tabla,**arbol.entornoGlobal.tabla}

        ventana.editor.append("\n"+etiquetaSalida+":")
        arbol.entornoGlobal.tabla = {**tsIf.tabla,**arbol.entornoGlobal.tabla}