Example #1
0
    def ejecutar_3D(self, Tabla):
        novo = TablaDeSimbolos(Tabla)
        self.inst_inicio.ejecutar_3D(novo)
        nombre_ciclo = "label" + str(id(self))
        novo.nuevo_codigo_3d(nombre_ciclo + ":")
        valor_exec = self.comprobador.ejecutar_3D(novo)
        if valor_exec.tipo != 0:
            novo.nuevo_error("Error De Tipo", "solo se aceptan tipos enteros en la condicional del FOR", 0, self.tupla)

        condicional = "if (" + valor_exec.temp_str() + " != 1) goto out" + nombre_ciclo + " ;"
        novo.nuevo_codigo_3d(condicional)

        self.cuerpo.paso_continue = nombre_ciclo
        self.cuerpo.paso_break = "out" + nombre_ciclo

        sal=self.cuerpo.ejecutar_3D(novo)
        if self.inst_cada is not None:
            if sal =="stopc":
                rest=novo.caso_continue()
                self.inst_cada.ejecutar_3D(novo)
                novo.nuevo_codigo_3d(rest)
            else:
                self.inst_cada.ejecutar_3D(novo)
                novo.nuevo_codigo_3d("goto " + nombre_ciclo + ";")


        novo.nuevo_codigo_3d("out" + nombre_ciclo + ":")
Example #2
0
    def ejecutar_3D(self, Tabla:TablaDeSimbolos):
        if self.paso_break is None:
            Tabla.nuevo_error("Error Break","Solo puede usarse en ciclos y switch",0,self.tupla)
            return

        Tabla.nuevo_codigo_3d("goto "+self.paso_break+";")

        return "stopu"
Example #3
0
    def ejecutar_3D(self, Tabla:TablaDeSimbolos):
        if self.paso_continue is None:
            Tabla.nuevo_error("Error Continue", "Continue Solo puede usarse en ciclos", 0, self.tupla)
            return

        Tabla.nuevo_codigo_3d("goto " + self.paso_continue + ";")

        return "stopc"
Example #4
0
    def ejecutar_3D(self, Tabla):

        novo = TablaDeSimbolos(Tabla)
        nombre_metodo = str(self.nombre)
        if self.nombre != "main":
            novo.nuevo_codigo_3d(nombre_metodo + ":")

        if len(self.param) > 0:
            self.simular_pop(novo)

        self.cuerpo.ejecutar_3D(novo)
        Tabla.ultimo_redundante("goto retornos;")
Example #5
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 #6
0
 def ejecutar_3D(self, Tabla):
     novo = TablaDeSimbolos(Tabla)
     lons = len(self.lst_param)
     conta = 0
     #print("LLAMANDO METODO")
     for each in self.lst_param:
         if conta > 0 or lons == 1:
             eti_temp: str = each.ejecutar_3D(novo).temp_str()
             if eti_temp.find("$") == -1:
                 novex = "$t" + str(novo.nuevo_correlativo())
                 inst = novex + "=" + eti_temp + ";"
                 novo.nuevo_codigo_3d(inst)
                 eti_temp = novex
             inst = "print( " + eti_temp + " );"
             novo.nuevo_codigo_3d(inst)
         #else:
         #print("TEMPORAL")
         #print(each.ejecutar_3D(novo).contenido);
         conta = conta + 1
Example #7
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 #8
0
    def ejecutar_3D(self, Tabla):
        novo = TablaDeSimbolos(Tabla)
        nombre_ciclo = "label" + str(id(self))
        novo.nuevo_codigo_3d(nombre_ciclo + ":")
        valor_exec = self.param.mi_tempo

        self.cuerpo.paso_continue = nombre_ciclo
        self.cuerpo.paso_break = "out" + nombre_ciclo

        self.cuerpo.ejecutar_3D(novo)
        if valor_exec is None:
            valor_exec = self.param.ejecutar_3D(novo)

        if valor_exec.tipo != 0:
            novo.nuevo_error(
                "Error De Tipo",
                "solo se aceptan tipos enteros en la condicional del Do While",
                0, self.tupla)
        condicional = "if (" + valor_exec.temp_str(
        ) + " != 1) goto out" + nombre_ciclo + " ;"
        novo.nuevo_codigo_3d(condicional)
        novo.nuevo_codigo_3d("goto " + nombre_ciclo + ";")
        novo.nuevo_codigo_3d("out" + nombre_ciclo + ":")
Example #9
0
 def ejecutar_3D(self, Tabla: TablaDeSimbolos):
     if Tabla.buscar_etiqueta(self.nombre, self.tupla) is not None:
         Tabla.nuevo_codigo_3d("goto ETI" + str(self.nombre) + ";")
Example #10
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 #11
0
 def ejecutar_3D(self, Tabla):
     novo = TablaDeSimbolos(Tabla)
     for each in self.lst_param:
         eti_temp=each.ejecutar_3D(novo).temp_str()
         inst="print( "+eti_temp+" );"
         novo.nuevo_codigo_3d(inst)
Example #12
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 #13
0
 def ejecutar_3D(self, Tabla:TablaDeSimbolos):
     if Tabla.nueva_etiqueta(self.nombre,self.tupla) is  None:
         Tabla.nuevo_codigo_3d("ETI"+str(self.nombre)+":")
Example #14
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