Example #1
0
    def simular_pop(self, novo):
        for cada in reversed(self.param):

            temp = Temporal(None, self.dar_tipo(cada[0]),
                            novo.nuevo_correlativo())
            mi_expresion = temp.temp_str() + "= $s0[$sp];#pop "
            novo.nuevo_codigo_3d(mi_expresion)
            mi_expresion = "$sp= $sp-1;"
            novo.nuevo_codigo_3d(mi_expresion)
            novo.nuevo_temporal(cada[1], temp)
Example #2
0
    def ejecutar_3D(self, Tabla ):

        if len(self.corche) != 0:
            return  self.ejecutar_arreglo(Tabla)

        valor_exec = None
        if self.valor is None:
            valor_exec = Temporal(0,0)
        else:
            valor_exec = self.valor.mi_tempo
            if valor_exec is None:
                valor_exec = self.valor.ejecutar_3D(Tabla)

            self.valor.pop_retorno(Tabla,valor_exec.contenido)

        if self.tipo != valor_exec.tipo and (self.union(self.tipo,valor_exec.tipo)==False):
            desc="Asignacion a una variable de tipo: "+self.tipo_a_str(self.tipo)+" un valor de tipo: "+self.tipo_a_str(valor_exec.tipo)
            Tabla.nuevo_error("Eror De Tipos",desc,0,self.tupla)

        ver_tipo = valor_exec.tipo
        for cada in self.nombre:
            temp = Temporal(None, ver_tipo, correlativo=Tabla.nuevo_correlativo())
            mi_expresion = temp.temp_str() + "= 0;"
            if self.nombre[-1] == cada:
                    mi_expresion = temp.temp_str() + "=" + valor_exec.temp_str() + ";"

            rst = Tabla.reemplazar_ultimo_codigo_3d(valor_exec.temp_str(), temp.temp_str())
            if rst is None:
                Tabla.nuevo_codigo_3d(mi_expresion)
            #Tabla.nuevo_codigo_3d(mi_expresion)
            Tabla.nuevo_temporal(cada, temp , self.tupla)
Example #3
0
 def ejecutar_3D(self, Tabla):
     exec_iz = self.operador_izquierdo.ejecutar_3D(Tabla)
     exec_de = self.operador_derecho.ejecutar_3D(Tabla)
     self.operador_izquierdo.pop_retorno(Tabla, exec_iz.temp_str())
     self.operador_derecho.pop_retorno(Tabla, exec_de.temp_str())
     ver_tipo = self.mi_tipo_ope(exec_iz, self.operando, exec_de, Tabla)
     temp = Temporal(None, ver_tipo, correlativo=Tabla.nuevo_correlativo())
     mi_expresion = temp.temp_str() + "=" + exec_iz.temp_str(
     ) + self.operando + exec_de.temp_str() + ";"
     Tabla.nuevo_codigo_3d(mi_expresion)
     self.mi_tempo = temp
     return temp
Example #4
0
    def ejecutar_arreglo(self,Tabla):
        lista_val = []
        for cor in self.corche:
            tem=cor.ejecutar_3D(Tabla);
            if tem.tipo != 0:
                desc = "Los indices de los arreglos solo pueden ser enteros"
                Tabla.nuevo_error("Eror De Tipos", desc, 0, self.tupla)
                return
            lista_val.append(tem)

        temp = Temporal(None, self.tipo+3, correlativo=Tabla.nuevo_correlativo())
        temp.lista_corchetes=lista_val
        mi_expresion = temp.temp_str() + "=" +  " array();"
        Tabla.nuevo_codigo_3d(mi_expresion)
        Tabla.nuevo_temporal(self.nombre[0], temp,self.tupla)
        self.ejecutar_arreglo_con_valor(Tabla,temp)
Example #5
0
    def ejecutar_3D(self, Tabla: TablaDeSimbolos):
        novo_tempo = Temporal(None, 0, Tabla.nuevo_correlativo())
        rst_condi = self.condicion.ejecutar_3D(Tabla)
        mi_nombre = "label" + str(id(self))
        condicion = "if(!" + str(
            rst_condi.contenido) + ") goto " + mi_nombre + ";"
        if rst_condi.tipo != 0:
            Tabla.nuevo_error("error de tipo",
                              "la condicion debe ser de tipo entero", 0,
                              self.tupla)
        Tabla.nuevo_codigo_3d(condicion)
        tempo_si = self.val_true.ejecutar_3D(Tabla)
        condicion = novo_tempo.contenido + "=" + str(tempo_si.contenido) + ";"
        Tabla.nuevo_codigo_3d(condicion)
        condicion = "goto out" + mi_nombre + ";"
        Tabla.nuevo_codigo_3d(condicion)
        condicion = mi_nombre + ":"
        Tabla.nuevo_codigo_3d(condicion)
        tempo_no = self.val_false.ejecutar_3D(Tabla)
        condicion = novo_tempo.contenido + "=" + str(tempo_no.contenido) + ";"
        Tabla.nuevo_codigo_3d(condicion)
        condicion = "out" + mi_nombre + ":"
        Tabla.nuevo_codigo_3d(condicion)

        return novo_tempo
Example #6
0
    def ejecutar_3D(self, Tabla):
        novo = TablaDeSimbolos(Tabla)
        lista_temp = []
        for each in self.lst_param:
            tempo: Temporal = each.ejecutar_3D(novo)

            each.pop_retorno(Tabla, tempo.contenido)

            param = Temporal(None, tempo.tipo, novo.nuevo_parametro())
            inst = param.param_str() + " = " + tempo.temp_str() + ";"
            lista_temp.append(inst)
            lista_temp.append("$sp = $sp + 1;")
            lista_temp.append("$s0[$sp] = " + param.param_str() + ";")
            # novo.nuevo_codigo_3d(inst)
            # novo.nuevo_codigo_3d("$sp = $sp + 1;")
            # novo.nuevo_codigo_3d("$s0[$sp] = "+param.param_str()+";")

        # for cada in Tabla.dic_temporales.items():
        # novo.nuevo_codigo_3d("$sp = $sp + 1;")
        # novo.nuevo_codigo_3d("$s0[$sp] = " + str(cada[1].contenido) + ";#push param")
        # novo.nuevo_codigo_3d("$s0[$sp] = $t2;#push param")
        novo.push_mi_alcance()

        for cada in lista_temp:
            novo.nuevo_codigo_3d(cada)

        novo.nuevo_codigo_3d("$ra = $ra + 1;")
        ra = novo.aumentar_retorno()
        novo.nuevo_codigo_3d("$s1[$ra] = " + str(ra) + " ;")

        novo.nuevo_codigo_3d("goto " + self.nombre_func + ";")
        novo.nuevo_codigo_3d("ra" + str(ra) + ":")
        novo.nuevo_codigo_3d("$ra = $ra - 1;")

        # for cada in Tabla.dic_temporales.items():
        # novo.nuevo_codigo_3d(str(cada[1].contenido) +" = $s0[$sp];#pop param")
        # novo.nuevo_codigo_3d("$t2 = $s0[$sp];#pop param")
        # novo.nuevo_codigo_3d("$sp = $sp - 1;")
        novo.pop_mi_alcance()

        corre = Tabla.nuevo_parametro()

        print("Implementar Tipo Del Retorno")

        Te = Temporal(None, 0, "v" + str(corre + 2))
        # Tabla.nuevo_temporal("$v"+str(corre+2),Te)
        return Te
Example #7
0
    def ejecutar_arreglo(self, Tabla):

        concat = ""
        for cor in self.corche:
            tem = cor.ejecutar_3D(Tabla)
            if tem.tipo != 0:
                desc = "Los indices de los arreglos solo pueden ser enteros"
                Tabla.nuevo_error("Eror De Tipos", desc, 0, self.tupla)
                return Temporal(0, 0)

            concat = concat + "[" + str(tem.contenido) + "]"

        vari = Tabla.buscar_temporal(self.nombre, self.tupla, None)
        if vari is None:
            self.tipo = 0
            return Temporal(0, 0)
        else:
            self.tipo = vari.tipo
            varre = Temporal(0, 0)

            if vari.tipo == 3 or vari.tipo == 4 or vari.tipo == 5:
                varre.tipo = vari.tipo - 3
            else:
                varre.tipo = vari.tipo
            varre.contenido = vari.contenido + concat
            return varre
Example #8
0
    def ejecutar_3D(self, Tabla):

        exec_op = self.operacion_unica.ejecutar_3D(Tabla)
        ver_tipo = self.mi_tipo_ope(self.operando, exec_op, Tabla)
        temp = Temporal(None, ver_tipo, correlativo=Tabla.nuevo_correlativo())
        self.operacion_unica.pop_retorno(Tabla, exec_op.temp_str())
        tmp_op = ""
        if self.operando != "+":
            tmp_op = self.operando

        mi_expresion = temp.temp_str() + "=" + tmp_op + exec_op.temp_str(
        ) + ";"
        Tabla.nuevo_codigo_3d(mi_expresion)
        if self.operando == "&":
            temp.ref = True
        self.mi_tempo = temp

        return temp
Example #9
0
    def ejecutar_3D(self, Tabla):
        if len(self.corche) != 0:
            return self.ejecutar_arreglo(Tabla)

        vari = Tabla.buscar_temporal(self.nombre, self.tupla, None)
        if vari is None:
            self.tipo = 0
            return Temporal(0, 0)
        else:
            self.tipo = vari.tipo
            return vari
Example #10
0
    def ejecutar_3D(self, Tabla):
        vari = Tabla.buscar_temporal(self.nombre, self.tupla, None)
        if vari is not None:
            if self.operando == "++":
                Tabla.nuevo_codigo_3d(vari.contenido + " = " + vari.contenido +
                                      " + 1;")
            else:
                Tabla.nuevo_codigo_3d(vari.contenido + " = " + vari.contenido +
                                      " - 1;")
        else:
            titu = "Variable: '" + self.nombre + " Encontrada "
            desc = "no se puede incrementar o decrementar si no esta definida la variable"
            Tabla.nuevo_error(titu, desc, 0, self.tupla)
            vari = Temporal(0, 0)

        return vari
Example #11
0
    def ejecutar_3D(self, Tabla: TablaDeSimbolos):
        novo_tempo = Temporal(None, 0, Tabla.nuevo_correlativo())
        tama = 20

        mid = self.tipo_fijo
        if self.tipo_fijo is None:
            execu = self.expre.ejecutar_3D(Tabla)
            mid = execu.tipo

        if mid == 1:
            tama = 8
        elif mid == 2:
            tama = 1
        elif mid == 0:
            tama = 4
        else:
            tama = 20

        Tabla.nuevo_codigo_3d(novo_tempo.contenido + " = " + str(tama) + ";")
        return novo_tempo
Example #12
0
 def ejecutar_3D(self, Tabla: TablaDeSimbolos):
     novo_tempo = Temporal(None, 0, Tabla.nuevo_correlativo())
     dot_exe = self.expre.ejecutar_3D(Tabla)
     sub_str: str = self.nombre
     if sub_str.find("double") != -1:
         sub_str = "(float)"
         novo_tempo.tipo = 1
     elif sub_str.find("float") != -1:
         novo_tempo.tipo = 1
     elif sub_str.find("int") != -1:
         novo_tempo.tipo = 0
     elif sub_str.find("char") != -1:
         novo_tempo.tipo = 2
     Tabla.nuevo_codigo_3d(novo_tempo.contenido + "=" + sub_str +
                           str(dot_exe.contenido) + ";")
     return novo_tempo
Example #13
0
    def ejecutar_3D(self, Tabla):
        concat = ""
        for cor in self.corche:
            tem = cor.ejecutar_3D(Tabla)
            if tem.tipo != 0:
                desc = "Los indices de los arreglos solo pueden ser enteros"
                Tabla.nuevo_error("Eror De Tipos", desc, 0, self.tupla)
                return Temporal(0, 0)
            concat = concat + "[" + str(tem.contenido) + "]"

        valor_exec = self.valor.mi_tempo
        if valor_exec is None:
            valor_exec = self.valor.ejecutar_3D(Tabla)

        vari = Tabla.buscar_temporal(self.nombre, self.tupla, None)
        if vari is not None:
            if not Tabla.struct_busqueda_atributo(vari.tipo, self.contenido,
                                                  self.tupla):
                return

            resg = vari.contenido
            vari.contenido = vari.contenido + concat + "[\"" + self.contenido + "\"]"
            # temp = vari
            # mi_expresion = temp.temp_str() + "=" + valor_exec.temp_str() + ";"
            if self.tipo_asignacion == "+=":
                Tabla.nuevo_codigo_3d(vari.contenido + " = " + vari.contenido +
                                      " + " + str(valor_exec.contenido) + ";")
            elif self.tipo_asignacion == "-=":
                Tabla.nuevo_codigo_3d(vari.contenido + " = " + vari.contenido +
                                      " - " + str(valor_exec.contenido) + ";")
            elif self.tipo_asignacion == "*=":
                Tabla.nuevo_codigo_3d(vari.contenido + " = " + vari.contenido +
                                      " * " + str(valor_exec.contenido) + ";")
            elif self.tipo_asignacion == "/=":
                Tabla.nuevo_codigo_3d(vari.contenido + " = " + vari.contenido +
                                      " / " + str(valor_exec.contenido) + ";")
            elif self.tipo_asignacion == "%=":
                Tabla.nuevo_codigo_3d(vari.contenido + " = " + vari.contenido +
                                      " % " + str(valor_exec.contenido) + ";")
            elif self.tipo_asignacion == "<<=":
                Tabla.nuevo_codigo_3d(vari.contenido + " = " + vari.contenido +
                                      " << " + str(valor_exec.contenido) + ";")
            elif self.tipo_asignacion == ">>=":
                Tabla.nuevo_codigo_3d(vari.contenido + " = " + vari.contenido +
                                      " >> " + str(valor_exec.contenido) + ";")
            elif self.tipo_asignacion == "&=":
                Tabla.nuevo_codigo_3d(vari.contenido + " = " + vari.contenido +
                                      " & " + str(valor_exec.contenido) + ";")
            elif self.tipo_asignacion == "^=":
                Tabla.nuevo_codigo_3d(vari.contenido + " = " + vari.contenido +
                                      " ^ " + str(valor_exec.contenido) + ";")
            elif self.tipo_asignacion == "|=":
                Tabla.nuevo_codigo_3d(vari.contenido + " = " + vari.contenido +
                                      " | " + str(valor_exec.contenido) + ";")
            else:
                rst = Tabla.reemplazar_ultimo_codigo_3d(
                    valor_exec.temp_str(), vari.temp_str())
                if rst is None:
                    mi_expresion = vari.contenido + " = " + valor_exec.temp_str(
                    ) + ";"
                    Tabla.nuevo_codigo_3d(mi_expresion)

            vari.contenido = resg
Example #14
0
    def ejecutar_3D(self, Tabla):

        valor_exec = self.valor.mi_tempo
        if valor_exec is None:
            valor_exec = self.valor.ejecutar_3D(Tabla)

        for cada in self.nombre:
            vari = Tabla.buscar_temporal(cada, self.tupla, None)
            if vari is not None:
                k_tipo = vari.tipo
                if k_tipo == 3 or k_tipo == 4 or k_tipo == 5:
                    k_tipo = k_tipo - 3

                if k_tipo != valor_exec.tipo:
                    #if vari.tipo ==1 and valor_exec.tipo==0:
                    #    pass
                    #else:
                    desc = "Asignacion a una variable de tipo: " + self.tipo_a_str(
                        vari.tipo) + " un valor de tipo: " + self.tipo_a_str(
                            valor_exec.tipo)
                    Tabla.nuevo_error("Eror De Tipos", desc, 0, self.tupla)

                aux = vari.contenido

                # concat=""
                # for cada_cosa in self.corche:
                #    val=cada_cosa.ejecutar_3D(Tabla)
                #    concat = "["+str(val.contenido)+"]"

                concat = ""
                for cor in self.corche:
                    tem = cor.ejecutar_3D(Tabla)
                    if tem.tipo != 0:
                        desc = "Los indices de los arreglos solo pueden ser enteros"
                        Tabla.nuevo_error("Eror De Tipos", desc, 0, self.tupla)
                        return Temporal(0, 0)
                    concat = concat + "[" + str(tem.contenido) + "]"

                vari.contenido = vari.contenido + concat
                # temp = vari
                # mi_expresion = temp.temp_str() + "=" + valor_exec.temp_str() + ";"
                if self.tipo_asignacion == "+=":
                    Tabla.nuevo_codigo_3d(vari.contenido + " = " +
                                          vari.contenido + " + " +
                                          str(valor_exec.contenido) + ";")
                elif self.tipo_asignacion == "-=":
                    Tabla.nuevo_codigo_3d(vari.contenido + " = " +
                                          vari.contenido + " - " +
                                          str(valor_exec.contenido) + ";")
                elif self.tipo_asignacion == "*=":
                    Tabla.nuevo_codigo_3d(vari.contenido + " = " +
                                          vari.contenido + " * " +
                                          str(valor_exec.contenido) + ";")
                elif self.tipo_asignacion == "/=":
                    Tabla.nuevo_codigo_3d(vari.contenido + " = " +
                                          vari.contenido + " / " +
                                          str(valor_exec.contenido) + ";")
                elif self.tipo_asignacion == "%=":
                    Tabla.nuevo_codigo_3d(vari.contenido + " = " +
                                          vari.contenido + " % " +
                                          str(valor_exec.contenido) + ";")
                elif self.tipo_asignacion == "<<=":
                    Tabla.nuevo_codigo_3d(vari.contenido + " = " +
                                          vari.contenido + " << " +
                                          str(valor_exec.contenido) + ";")
                elif self.tipo_asignacion == ">>=":
                    Tabla.nuevo_codigo_3d(vari.contenido + " = " +
                                          vari.contenido + " >> " +
                                          str(valor_exec.contenido) + ";")
                elif self.tipo_asignacion == "&=":
                    Tabla.nuevo_codigo_3d(vari.contenido + " = " +
                                          vari.contenido + " & " +
                                          str(valor_exec.contenido) + ";")
                elif self.tipo_asignacion == "^=":
                    Tabla.nuevo_codigo_3d(vari.contenido + " = " +
                                          vari.contenido + " ^ " +
                                          str(valor_exec.contenido) + ";")
                elif self.tipo_asignacion == "|=":
                    Tabla.nuevo_codigo_3d(vari.contenido + " = " +
                                          vari.contenido + " | " +
                                          str(valor_exec.contenido) + ";")
                else:
                    rst = None
                    rst = Tabla.reemplazar_ultimo_codigo_3d(
                        valor_exec.temp_str(), vari.temp_str())
                    if rst is None:
                        mi_expresion = vari.contenido + " = " + valor_exec.temp_str(
                        ) + ";"
                        Tabla.nuevo_codigo_3d(mi_expresion)

                vari.contenido = aux
Example #15
0
 def ejecutar_3D(self, Tabla: TablaDeSimbolos):
     novo_tempo = Temporal(None, 0, Tabla.nuevo_correlativo())
     Tabla.nuevo_codigo_3d(novo_tempo.contenido + " = read();")
     return novo_tempo