Esempio n. 1
0
    def traducir(self, entorno: Tabla_de_simbolos, arbol: Arbol):
        i = 0
        while i < len(arbol.ReporteTS_Indice):
            report: ReportIndice = arbol.ReporteTS_Indice[i]
            if str(report.nombre) == str(self.name):

                for j in range(len(report.columnas)):
                    col: str = report.columnas[j]
                    if col == self.beforecolumn:
                        arbol.ReporteTS_Indice[i].columnas[
                            j] = self.actualcolumn
                        return

                error: ErroresSemanticos = ErroresSemanticos(
                    'No existe un index para la columna  \'' +
                    self.beforecolumn + '\'', self.linea, self.columna,
                    'alterindex')
                arbol.ErroresSemanticos.append(error)
                return
            i += 1

        error: ErroresSemanticos = ErroresSemanticos(
            'No  existe el index \'' + self.name + '\'', self.linea,
            self.columna, 'alterindex')
        arbol.ErroresSemanticos.append(error)
        return
Esempio n. 2
0
    def traducir(self, entorno: Tabla_de_simbolos, arbol: Arbol):
        try:
            izquierdo = self.izq.traducir(entorno,
                                          arbol)  # <-- tiene un temporal
            derecho = self.der.traducir(entorno,
                                        arbol)  # <-- tiene un temporal

            if str(izquierdo) == 'None' or str(izquierdo) == '':
                descripcion = 'El nodo izquierdo no es valido en operacion relacional/Logica'
                reportero = ErroresSemanticos(descripcion, str(self.linea),
                                              str(self.columna),
                                              'OperacionesRelaciones')
                arbol.ErroresSemanticos.append(reportero)
                return 'False'
            elif str(derecho) == 'None' or str(derecho) == '':
                descripcion = 'El nodo derecho no es valido en operacion relacional/Logica'
                reportero = ErroresSemanticos(descripcion, str(self.linea),
                                              str(self.columna),
                                              'OperacionesRelaciones')
                arbol.ErroresSemanticos.append(reportero)
                return 'False'
            else:
                pass

            tmp = str(izquierdo) + " " + str(
                self.tipoOperaRelacional) + " " + str(derecho)
            return tmp
        except:
            return 'False'
Esempio n. 3
0
    def traducir(self, entorno: Tabla_de_simbolos, arbol: Arbol):

        try:
            if self.esNecesarioOptimizar(entorno, arbol):
                return self.traducir_optimizado(entorno, arbol)

            izquierdo = self.izq.traducir(entorno,
                                          arbol)  # <-- tiene un temporal
            derecho = self.der.traducir(entorno,
                                        arbol)  # <-- tiene un temporal

            if derecho == 0:
                # Error de tipos
                desc = 'Parametro derecho de DIVISION es cero'
                reportero = ErroresSemanticos(desc, str(self.linea),
                                              str(self.columna), 'DIVISION')
                arbol.ErroresSemanticos.append(reportero)
                # -------------------------------------------------------------
                tmp = arbol.getTemp()
                arbol.addC3D(tmp + " = 0")
                return tmp

            else:
                if self.analizar_semanticamente(entorno, arbol) == 0:
                    tmp = arbol.getTemp()
                    arbol.addC3D(tmp + " = int(" + izquierdo + ") / int(" +
                                 derecho + ")")
                    return tmp
                elif self.analizar_semanticamente(entorno, arbol) == 1:
                    tmp = arbol.getTemp()
                    arbol.addC3D(tmp + " = float(" + izquierdo + ") / float(" +
                                 derecho + ")")
                    return tmp
                else:
                    # Error de tipos
                    desc = 'Parametros no validos en DIVISION'
                    reportero = ErroresSemanticos(desc, str(self.linea),
                                                  str(self.columna),
                                                  'DIVISION')
                    arbol.ErroresSemanticos.append(reportero)
                    # -------------------------------------------------------------
                    tmp = arbol.getTemp()
                    arbol.addC3D(tmp + " = 0")
                    return tmp
        except:
            tmp = arbol.getTemp()
            arbol.addC3D(tmp + " = 0")
            return tmp
Esempio n. 4
0
    def traducir(self, entorno: Tabla_de_simbolos, arbol: Arbol):

        try:
            izquierdo = self.izq.traducir(entorno, arbol)  # <-- tiene un temporal
            derecho = self.der.traducir(entorno, arbol)  # <-- tiene un temporal

            if self.analizar_semanticamente(entorno, arbol) == 0:
                tmp = arbol.getTemp()
                arbol.addC3D(tmp + " = pow(int(" + izquierdo + ") , int(" + derecho + "))")
                return tmp
            elif self.analizar_semanticamente(entorno, arbol) == 1:
                tmp = arbol.getTemp()
                arbol.addC3D(tmp + " = pow(int(" + izquierdo + ") , int(" + derecho + "))")
                return tmp
            else:
                # Error de tipos
                desc = 'Parametros no validos en EXPONENTE'
                reportero = ErroresSemanticos(desc, str(self.linea), str(self.columna), 'EXPONENTE')
                arbol.ErroresSemanticos.append(reportero)
                # -------------------------------------------------------------
                tmp = arbol.getTemp()
                arbol.addC3D(tmp + " = 0")
                return tmp
        except:
            tmp = arbol.getTemp()
            arbol.addC3D(tmp + " = 0")
            return tmp
Esempio n. 5
0
    def traducir(self, entorno: Tabla_de_simbolos, arbol: Arbol):

        # verificar si la fun esta activa:
        if arbol.lFun_isINACTIVE(str(self.identificador)):
            descripcion = 'Funcion ' + str(
                self.identificador) + ' esta inactivado, no puede usarse'
            reportero = ErroresSemanticos(descripcion, str(self.linea),
                                          str(self.columna), 'lappel')
            arbol.ErroresSemanticos.append(reportero)
            temp = arbol.getTemp()
            arbol.addC3D(temp + ' = \'\'')
            return temp
        #------------------------------------------

        argumentos = ''
        contador = 0

        try:
            for i in self.expres:
                if contador == 0:
                    argumentos = argumentos + i.getString(entorno, arbol)
                    contador = 1
                else:
                    argumentos = argumentos + ',' + i.getString(entorno, arbol)
        except:
            argumentos = ''

        temp = arbol.getTemp()
        if str(self.identificador) == 'now':
            ahora = '\'' + str(datetime.now()) + '\''
            arbol.addC3D(temp + ' = ' + ahora)
        else:
            arbol.addC3D(temp + ' = ' + str(self.identificador) + '(' +
                         argumentos + ')')
        return temp
Esempio n. 6
0
 def traducir(self, entorno: Tabla_de_simbolos, arbol:Arbol):
     try:
         tmp = self.getValueAbstract(entorno, arbol)
         arbol.addC3D("print(str(" + str(tmp) + "))")
     except:
         arbol.addC3D("print(str(Invalid))")
         descripcion = 'Expresion invalida para el print'
         reportero = ErroresSemanticos(descripcion, str(self.linea), str(self.columna), 'Raise complex')
         arbol.ErroresSemanticos.append(reportero)
     return
Esempio n. 7
0
 def traducir(self, entorno: Tabla_de_simbolos, arbol: Arbol):
     try:
         if self.exp == None:
             arbol.addC3D("return")
         else:
             try:
                 tmp = self.exp.traducir(entorno, arbol)
                 arbol.addC3D("return " + str(tmp) + "")
             except:
                 arbol.addC3D("return")
                 descripcion = 'Expresion invalida para el retorn'
                 reportero = ErroresSemanticos(descripcion, str(self.linea),
                                               str(self.columna), 'retorn')
                 arbol.ErroresSemanticos.append(reportero)
     except:
         arbol.addC3D("return")
         descripcion = 'Expresion invalida para el retorn'
         reportero = ErroresSemanticos(descripcion, str(self.linea),
                                       str(self.columna), 'retorn')
         arbol.ErroresSemanticos.append(reportero)
     return
Esempio n. 8
0
    def traducir(self, entorno: Tabla_de_simbolos, arbol: Arbol):

        if arbol.existFun(str(self.identificador)):
            pass
        else:
            nota = 'Funcion ' + str(self.identificador) + ' no existe'
            reportero = ErroresSemanticos(nota, self.linea, self.columna, 'dropfun')
            arbol.ErroresSemanticos.append(reportero)
            return

        arbol.dropFuncione(str(self.identificador))
        print('NH -> funcion ' + str(self.identificador) + ' eliminada exitosamente')
        return
Esempio n. 9
0
    def traducir(self, entorno: Tabla_de_simbolos, arbol: Arbol):

        # codigo soporte para TS
        if arbol.existFun(str(self.header.getID())):

            if arbol.lFun_isINACTIVE(str(self.header.getID())):
                arbol.covertInactivaeTOactivate(str(self.header.getID()))
                return

            nota = 'Funcion ' + str(
                self.header.getID()) + ' ya existe, no soporte a sobrecarga'
            reportero = ErroresSemanticos(nota, self.linea, self.columna,
                                          'funexecute')
            arbol.ErroresSemanticos.append(reportero)
            return

        reportero = ReporteTS_forFunction(str(self.header.getID()),
                                          str(self.header.getID()), 'Funcion',
                                          'ACTIVO', str(self.linea),
                                          str(self.columna))
        arbol.ReporteTS_Funciones.append(reportero)
        # -------------------------------

        arbol.switchC3Dfunciones()

        argumentos_puros = self.header.getArgumentos()
        arbol.addC3D("def " + str(self.header.getID()) + "(" +
                     str(argumentos_puros) + "):")

        arbol.resetIdentacion_funciones()
        arbol.addIdentacion()

        self.header.traducir(entorno, arbol)

        if self.stmt_declare == None:
            pass
        else:
            for item in self.stmt_declare:
                item.traducir(entorno, arbol)

        if self.stmt_body == None:
            arbol.addC3D('pass')
        else:
            for item in self.stmt_body:
                item.traducir(entorno, arbol)

        arbol.resetIdentacion_funciones()
        arbol.switchC3Dmain()

        return
Esempio n. 10
0
    def traducir(self, entorno: Tabla_de_simbolos, arbol: Arbol):
        i = 0
        while i < len(arbol.ReporteTS_Indice):
            report: ReportIndice = arbol.ReporteTS_Indice[i]
            if str(report.nombre) == str(self.name):
                arbol.ReporteTS_Indice[i].nombre = str(self.rename)
                arbol.ReporteTS_Indice[i].alias = str(self.rename)
                return
            i += 1

        error: ErroresSemanticos = ErroresSemanticos(
            'No  existe el index \'' + self.name + '\'', self.linea,
            self.columna, 'alterindex')
        arbol.ErroresSemanticos.append(error)
        return
Esempio n. 11
0
    def traducir(self, entorno: Tabla_de_simbolos, arbol: Arbol):


        for temp in arbol.ReporteTS_Indice:
            if temp.nombre == self.identificador:
                error:ErroresSemanticos = ErroresSemanticos('Ya existe el index \''+temp.nombre+'\'', self.linea, self.columna, 'Indice')
                arbol.ErroresSemanticos.append(error)
                return

        columnas:List[str]= []
        for i in self.index_params:
            columnas.append(i.column)


        consideraciones= ''
        options:List[Option] = self.index_params[0].options
        for i in options:
            consideraciones+=i.option+' '


        nodo = ReportIndice(self.identificador,self.identificador,self.tipo,columnas,consideraciones, self.columna, self.columna)

        arbol.ReporteTS_Indice.append(nodo)
        return