Пример #1
0
    def traducir_regla4(self, entorno: Tabla_de_simbolos, arbol: Arbol):
        Bv = arbol.getLabel()
        Bf = arbol.getLabel()
        validacion = str(self.exp.traducir(entorno, arbol))

        arbol.addC3D("if " + validacion + ':')
        arbol.addIdentacion()
        arbol.addC3D("goto ." + str(Bv))
        arbol.popIdentacion()

        arbol.addC3D('else:')
        arbol.addIdentacion()
        arbol.addC3D("goto ." + Bf)
        arbol.popIdentacion()

        arbol.addC3D('label .' + Bv)
        for item in self.body:
            item.traducir(entorno, arbol)
        arbol.addC3D('label .' + Bf)

        # optimizacion ---------------------------
        # Regla no.4:
        original = "if " + validacion + " goto " + str(Bv) + ' goto ' + str(Bf)
        optimizado = "goto " + str(Bv)
        reportero = ReporteOptimizacion('Regla 4', original, optimizado,
                                        str(self.linea), str(self.columna))
        arbol.ReporteOptimizacion.append(reportero)
        # ----------------------------------------------------------------

        return
Пример #2
0
    def traducir_regla5(self, entorno: Tabla_de_simbolos, arbol: Arbol):
        Bv = arbol.getLabel()
        Bf = arbol.getLabel()
        validacion = str(self.exp.traducir(entorno, arbol))
        arbol.addC3D('label ' + Bf)

        # optimizacion ---------------------------
        # Regla no.5:
        original = "if " + validacion + " goto " + str(Bv) + ' goto ' + str(Bf)
        optimizado = "goto " + str(Bf)
        reportero = ReporteOptimizacion('Regla 5', original, optimizado, str(self.linea), str(self.columna))
        arbol.ReporteOptimizacion.append(reportero)
        # ----------------------------------------------------------------
        return
Пример #3
0
    def traducir(self, entorno: Tabla_de_simbolos, arbol: Arbol):

        if entorno.varibaleExiste(str(self.identificador)):
            pass
        else:
            return var_declaracion(str(self.identificador), 0, self.exp,
                                   self.linea, self.columna)

        tmp = entorno.obtener_temporal_deVar(str(self.identificador))
        #val:Valor = self.exp.getValueAbstract(entorno, arbol)
        expres = self.exp.traducir(entorno, arbol)

        try:
            if str(tmp) == str(expres[0]):

                if str(expres[1]) == '8-12':
                    # Regla no. 8 -----------------------------
                    original = str(tmp) + ' = ' + str(expres[0]) + ' + 0'
                    optimizado = 'Se elimina la instruccion'
                    reportero = ReporteOptimizacion('Regla 8',
                                                    original, optimizado,
                                                    str(self.linea),
                                                    str(self.columna))
                    arbol.ReporteOptimizacion.append(reportero)
                    # -----------------------------------------------------------------------------
                    return
                elif str(expres[1]) == '9-13':
                    # Regla no. 8 -----------------------------
                    original = str(tmp) + ' = ' + str(expres[0]) + ' - 0'
                    optimizado = 'Se elimina la instruccion'
                    reportero = ReporteOptimizacion('Regla 9',
                                                    original, optimizado,
                                                    str(self.linea),
                                                    str(self.columna))
                    arbol.ReporteOptimizacion.append(reportero)
                    # -----------------------------------------------------------------------------
                    return
                elif str(expres[1]) == '10-14':
                    # Regla no. 8 -----------------------------
                    original = str(tmp) + ' = ' + str(expres[0]) + ' * 1'
                    optimizado = 'Se elimina la instruccion'
                    reportero = ReporteOptimizacion('Regla 10',
                                                    original, optimizado,
                                                    str(self.linea),
                                                    str(self.columna))
                    arbol.ReporteOptimizacion.append(reportero)
                    # -----------------------------------------------------------------------------
                    return
                elif str(expres[1]) == '11-15':
                    # Regla no. 11 -----------------------------
                    original = str(tmp) + ' = ' + str(expres[0]) + ' / 1'
                    optimizado = 'Se elimina la instruccion'
                    reportero = ReporteOptimizacion('Regla 11',
                                                    original, optimizado,
                                                    str(self.linea),
                                                    str(self.columna))
                    arbol.ReporteOptimizacion.append(reportero)
                    # -----------------------------------------------------------------------------
                    return
                elif str(expres[1]) == '16':
                    arbol.addC3D(tmp + ' = ' + str(expres[0]) + ' + ' +
                                 str(expres[0]))
                    # Regla no. 16 -----------------------------
                    original = str(tmp) + ' = ' + str(expres[0]) + ' * 2'
                    optimizado = str(tmp) + ' = ' + str(
                        expres[0]) + ' + ' + str(expres[0])
                    reportero = ReporteOptimizacion('Regla 16',
                                                    original, optimizado,
                                                    str(self.linea),
                                                    str(self.columna))
                    arbol.ReporteOptimizacion.append(reportero)
                    # -----------------------------------------------------------------------------
                    return
                elif str(expres[1]) == '17':
                    arbol.addC3D(tmp + ' = 0')
                    # Regla no. 17 -----------------------------
                    original = str(tmp) + ' = ' + str(expres[0]) + ' * 0'
                    optimizado = str(tmp) + ' = 0'
                    reportero = ReporteOptimizacion('Regla 17',
                                                    original, optimizado,
                                                    str(self.linea),
                                                    str(self.columna))
                    arbol.ReporteOptimizacion.append(reportero)
                    # -----------------------------------------------------------------------------
                    return
                elif str(expres[1]) == '18':
                    arbol.addC3D(tmp + ' = 0')
                    # Regla no. 18 -----------------------------
                    original = str(tmp) + ' = 0 / ' + str(expres[0])
                    optimizado = str(tmp) + ' = 0'
                    reportero = ReporteOptimizacion('Regla 18',
                                                    original, optimizado,
                                                    str(self.linea),
                                                    str(self.columna))
                    arbol.ReporteOptimizacion.append(reportero)
                    # -----------------------------------------------------------------------------
                    return
            elif str(expres[1]) == '8-12':
                arbol.addC3D(tmp + ' = ' + str(expres[0]))
                # Regla no. 9 -----------------------------
                original = str(tmp) + ' = ' + str(expres[0]) + ' + 0'
                optimizado = str(tmp) + ' = ' + str(expres[0])
                reportero = ReporteOptimizacion('Regla 12', original,
                                                optimizado, str(self.linea),
                                                str(self.columna))
                arbol.ReporteOptimizacion.append(reportero)
                # -----------------------------------------------------------------------------
                return
            elif str(expres[1]) == '9-13':
                arbol.addC3D(tmp + ' = ' + str(expres[0]))
                # Regla no. 9 -----------------------------
                original = str(tmp) + ' = ' + str(expres[0]) + ' - 0'
                optimizado = str(tmp) + ' = ' + str(expres[0])
                reportero = ReporteOptimizacion('Regla 13', original,
                                                optimizado, str(self.linea),
                                                str(self.columna))
                arbol.ReporteOptimizacion.append(reportero)
                # -----------------------------------------------------------------------------
                return
            elif str(expres[1]) == '10-14':
                arbol.addC3D(tmp + ' = ' + str(expres[0]))
                # Regla no. 9 -----------------------------
                original = str(tmp) + ' = ' + str(expres[0]) + ' * 1'
                optimizado = str(tmp) + ' = ' + str(expres[0])
                reportero = ReporteOptimizacion('Regla 14', original,
                                                optimizado, str(self.linea),
                                                str(self.columna))
                arbol.ReporteOptimizacion.append(reportero)
                # -----------------------------------------------------------------------------
                return
            elif str(expres[1]) == '11-15':
                arbol.addC3D(tmp + ' = ' + str(expres[0]))
                # Regla no. 9 -----------------------------
                original = str(tmp) + ' = ' + str(expres[0]) + ' / 1'
                optimizado = str(tmp) + ' = ' + str(expres[0])
                reportero = ReporteOptimizacion('Regla 15', original,
                                                optimizado, str(self.linea),
                                                str(self.columna))
                arbol.ReporteOptimizacion.append(reportero)
                # -----------------------------------------------------------------------------
                return
            elif str(expres[1]) == '16':
                arbol.addC3D(tmp + ' = ' + str(expres[0]) + ' + ' +
                             str(expres[0]))
                # Regla no. 16 -----------------------------
                original = str(tmp) + ' = ' + str(expres[0]) + ' * 2'
                optimizado = str(tmp) + ' = ' + str(expres[0]) + ' + ' + str(
                    expres[0])
                reportero = ReporteOptimizacion('Regla 16', original,
                                                optimizado, str(self.linea),
                                                str(self.columna))
                arbol.ReporteOptimizacion.append(reportero)
                # -----------------------------------------------------------------------------
                return
            elif str(expres[1]) == '17':
                arbol.addC3D(tmp + ' = 0')
                # Regla no. 17 -----------------------------
                original = str(tmp) + ' = ' + str(expres[0]) + ' * 0'
                optimizado = str(tmp) + ' = 0'
                reportero = ReporteOptimizacion('Regla 17', original,
                                                optimizado, str(self.linea),
                                                str(self.columna))
                arbol.ReporteOptimizacion.append(reportero)
                # -----------------------------------------------------------------------------
                return
            elif str(expres[1]) == '18':
                arbol.addC3D(tmp + ' = 0')
                # Regla no. 18 -----------------------------
                original = str(tmp) + ' = 0 / ' + str(expres[0])
                optimizado = str(tmp) + ' = 0'
                reportero = ReporteOptimizacion('Regla 18', original,
                                                optimizado, str(self.linea),
                                                str(self.columna))
                arbol.ReporteOptimizacion.append(reportero)
                # -----------------------------------------------------------------------------
                return
        except:
            pass

        arbol.addC3D(tmp + ' = ' + expres)
        '''if str(val.tipo) == '2':
            arbol.addC3D(tmp + ' = ' + '\'' + str(val.data) + '\'')
        else:
            arbol.addC3D(tmp + ' = ' + str(val.data))'''
        return
Пример #4
0
    def traducir(self, entorno: Tabla_de_simbolos, arbol:Arbol):
        if self.exp != None:

            expres = self.exp.traducir(entorno, arbol)

            # modulo de insercion a TS
            try:
                val_exp = self.exp.getValueAbstract(entorno, arbol)
                simbol: Simbolo = Simbolo(str(self.identificador), val_exp.tipo, val_exp)
                if str(expres[1]) == '8-12' or str(expres[1]) == '9-13' or str(expres[1]) == '10-14' or \
                        str(expres[1]) == '11-15' or str(expres[1]) == '16' or str(expres[1]) == '17' \
                        or str(expres[1]) == '18':
                    simbol.setTemp(str(expres[0]))
                else:
                    simbol.setTemp(str(expres))
                entorno.insertar_variable(simbol)
            except:
                val_exp = Valor(2, 'DML')
                simbol: Simbolo = Simbolo(str(self.identificador), val_exp.tipo, val_exp)
                if str(expres[1]) == '8-12' or str(expres[1]) == '9-13' or str(expres[1]) == '10-14' or \
                        str(expres[1]) == '11-15' or str(expres[1]) == '16' or str(expres[1]) == '17' \
                        or str(expres[1]) == '18':
                    simbol.setTemp(str(expres[0]))
                else:
                    simbol.setTemp(str(expres))
                entorno.insertar_variable(simbol)



            # -->
            # Modulo de rporteria:
            reportero = ReporteTS(str(self.identificador), str(self.identificador), 'Variable', 'N/A', str(self.linea), str(self.columna))
            arbol.ReporteTS.append(reportero)
            # -->


            # ----------------------------------------------------------------------------------

            # modulo de insercion a TS optimizado
            try:
                tmp = str(self.identificador)
                if str(expres[1]) == '8-12':
                    # Regla no. 9 -----------------------------
                    original = str(tmp) + ' = ' + str(expres[0]) + ' + 0'
                    optimizado = str(tmp) + ' = ' + str(expres[0])
                    reportero = ReporteOptimizacion('Regla 12', original, optimizado, str(self.linea),
                                                    str(self.columna))
                    arbol.ReporteOptimizacion.append(reportero)
                    # -----------------------------------------------------------------------------
                    return
                elif str(expres[1]) == '9-13':
                    # Regla no. 9 -----------------------------
                    original = str(tmp) + ' = ' + str(expres[0]) + ' - 0'
                    optimizado = str(tmp) + ' = ' + str(expres[0])
                    reportero = ReporteOptimizacion('Regla 13', original, optimizado, str(self.linea),
                                                    str(self.columna))
                    arbol.ReporteOptimizacion.append(reportero)
                    # -----------------------------------------------------------------------------
                    return
                elif str(expres[1]) == '10-14':
                    # Regla no. 9 -----------------------------
                    original = str(tmp) + ' = ' + str(expres[0]) + ' * 1'
                    optimizado = str(tmp) + ' = ' + str(expres[0])
                    reportero = ReporteOptimizacion('Regla 14', original, optimizado, str(self.linea),
                                                    str(self.columna))
                    arbol.ReporteOptimizacion.append(reportero)
                    # -----------------------------------------------------------------------------
                    return
                elif str(expres[1]) == '11-15':
                    # Regla no. 9 -----------------------------
                    original = str(tmp) + ' = ' + str(expres[0]) + ' / 1'
                    optimizado = str(tmp) + ' = ' + str(expres[0])
                    reportero = ReporteOptimizacion('Regla 15', original, optimizado, str(self.linea),
                                                    str(self.columna))
                    arbol.ReporteOptimizacion.append(reportero)
                    # -----------------------------------------------------------------------------
                    return
                elif str(expres[1]) == '16':
                    # Regla no. 16 -----------------------------
                    original = str(tmp) + ' = ' + str(expres[0]) + ' * 2'
                    optimizado = str(tmp) + ' = ' + str(expres[0]) + ' + ' + str(expres[0])
                    reportero = ReporteOptimizacion('Regla 16', original, optimizado, str(self.linea),
                                                    str(self.columna))
                    arbol.ReporteOptimizacion.append(reportero)
                    # -----------------------------------------------------------------------------
                    return
                elif str(expres[1]) == '17':
                    # Regla no. 17 -----------------------------
                    original = str(tmp) + ' = ' + str(expres[0]) + ' * 0'
                    optimizado = str(tmp) + ' = 0'
                    reportero = ReporteOptimizacion('Regla 17', original, optimizado, str(self.linea),
                                                    str(self.columna))
                    arbol.ReporteOptimizacion.append(reportero)
                    # -----------------------------------------------------------------------------
                    return
                elif str(expres[1]) == '18':
                    # Regla no. 18 -----------------------------
                    original = str(tmp) + ' = 0 / ' + str(expres[0])
                    optimizado = str(tmp) + ' = 0'
                    reportero = ReporteOptimizacion('Regla 18', original, optimizado, str(self.linea),
                                                    str(self.columna))
                    arbol.ReporteOptimizacion.append(reportero)
                    # -----------------------------------------------------------------------------
                    return
            except:
                pass
            # ----------------------------------------------------------------------------------




        else:
            tmp = arbol.getTemp()
            arbol.addC3D(tmp + " = '' #" + str(self.identificador))
            val_exp:Valor = Valor(2, 'NULL')
            simbol:Simbolo = Simbolo(str(self.identificador), val_exp.tipo, val_exp)
            simbol.setTemp(str(tmp))
            entorno.insertar_variable(simbol)

            # -->
            # Modulo de rporteria:
            reportero = ReporteTS(str(self.identificador), str(self.identificador), 'Variable', 'N/A', str(self.linea),
                                  str(self.columna))
            arbol.ReporteTS.append(reportero)
            # -->

        #self.analizar_semanticamente(entorno, arbol)
        return