コード例 #1
0
ファイル: FuncBreak.py プロジェクト: esnorki2008/Interprete
    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"
コード例 #2
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"
コード例 #3
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;")
コード例 #4
0
ファイル: Main.py プロジェクト: esnorki2008/Interprete
def analizar_minor_c(cadena_entrada):
    tab = TablaDeSimbolos(None)
    lst_repo_grama = []
    rst = analizar_ascendente(cadena_entrada, lst_repo_grama)
    if rst is None:
        print("Error")
    else:
        #print(rst.str_arbol());
        rst.ejecutar_3D(tab)
        tab.terminar_codigo_3d()
        #from Contenido.Optimo import Optimo
        #Optm:Optimo = Optimo(tab.codigo_3d)
        #lst_sal = Optm.codigo_optimizado()
        return tab.string_codigo_3d(tab.codigo_3d)
コード例 #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
コード例 #6
0
    def ejecutar_3D(self, Tabla):
        temp = self.param.ejecutar_3D(Tabla)
        mi_eti = "out" + str(id(self))
        defa = None

        for cada in self.cuerpo_switch:
            cada.paso_continue = self.paso_continue
            cada.paso_break = mi_eti
            if cada.param is not None:
                novo = TablaDeSimbolos(Tabla)
                cada.ejecutar_3D(novo, temp, mi_eti)

            else:
                defa = cada

        novo = TablaDeSimbolos(Tabla)
        if defa is not None:
            defa.ejecutar_3D(novo, temp, mi_eti)
        Tabla.nuevo_codigo_3d(mi_eti + ":")
コード例 #7
0
ファイル: FuncSizeof.py プロジェクト: esnorki2008/MinorC
    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
コード例 #8
0
ファイル: Main.py プロジェクト: esnorki2008/MinorC
 def analizar_minor_c(self,cadena_entrada):
     tab = TablaDeSimbolos(None)
     self.lst_repo_grama = []
     self.raiz_arbol = None
     self.lst_historial_variables = []
     rst = analizar_ascendente(cadena_entrada,self.lst_repo_grama,tab)
     if rst is None :
         self.lst_errores = tab.lst_errores
         print("Error")
     else:
         
         self.raiz_arbol = rst
         from AProyecto2.Contenido.Instrucciones.Listas.ListaMetodos import ListaMetodos
         self.lst_metodos_declarados = []
         if isinstance(rst,ListaMetodos):
             rst.reporte_metodos(self.lst_metodos_declarados)
         #print(rst.str_arbol());
         rst.ejecutar_3D(tab)
         self.lst_historial_variables = tab.lst_historial_variables
         tab.lst_historial_variables = []
         tab.terminar_codigo_3d()
         self.lst_errores = tab.lst_errores
         #from Contenido.Optimo import Optimo
         #Optm:Optimo = Optimo(tab.codigo_3d)
         #lst_sal = Optm.codigo_optimizado()
         return tab.string_codigo_3d(tab.codigo_3d)
コード例 #9
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
コード例 #10
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 + ":")
コード例 #11
0
ファイル: Goto.py プロジェクト: esnorki2008/Interprete
 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) + ";")
コード例 #12
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
        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 WHILE", 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

        self.cuerpo.ejecutar_3D(novo)
        novo.nuevo_codigo_3d("goto " + nombre_ciclo + ";")
        novo.nuevo_codigo_3d("out" + nombre_ciclo + ":")
コード例 #13
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
コード例 #14
0
ファイル: FuncPrintF.py プロジェクト: esnorki2008/Interprete
 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)
コード例 #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
コード例 #16
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
コード例 #17
0
    def ejecutar_3D(self, Tabla):
        novo = TablaDeSimbolos(Tabla)
        valor_exec = self.param.mi_tempo
        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 IF", 0, self.tupla)

        if self.cuerpo_no is None:
            self.cuerpo_si.paso_continue = self.paso_continue
            self.cuerpo_si.paso_break = self.paso_break
        else:
            self.cuerpo_si.paso_continue = self.paso_continue
            self.cuerpo_si.paso_break = self.paso_break
            self.cuerpo_no.paso_continue = self.paso_continue
            self.cuerpo_no.paso_break = self.paso_break

        if self.nombre_padre is None:
            nombre_if = "label" + str(id(self))

            if self.cuerpo_no is None:
                condicional = "if (!" + valor_exec.temp_str() + ") goto out" + nombre_if + " ;"
                Tabla.nuevo_codigo_3d(condicional)
                novo = TablaDeSimbolos(Tabla)
                self.cuerpo_si.ejecutar_3D(novo)
                condicional = "out" + nombre_if + ": "
                Tabla.nuevo_codigo_3d(condicional)
            else:
                condicional = "if (!" + valor_exec.temp_str() + ") goto out" + str(id(self.cuerpo_no)) + " ;"
                Tabla.nuevo_codigo_3d(condicional)
                novo = TablaDeSimbolos(Tabla)
                self.cuerpo_si.ejecutar_3D(novo)
                condicional = "goto out" + nombre_if + "; "
                Tabla.nuevo_codigo_3d(condicional)
                condicional = "out" + str(id(self.cuerpo_no)) + ": "
                Tabla.nuevo_codigo_3d(condicional)
                novo = TablaDeSimbolos(Tabla)
                self.cuerpo_no.nombre_padre = nombre_if
                self.cuerpo_no.ejecutar_3D(novo)
                condicional = "out" + nombre_if + ": "
                Tabla.nuevo_codigo_3d(condicional)
        else:
            nombre_if = "label" + str(id(self))
            if self.cuerpo_no is None:
                condicional = "if (!" + valor_exec.temp_str() + ") goto out" + self.nombre_padre + " ;"
                Tabla.nuevo_codigo_3d(condicional)
                novo = TablaDeSimbolos(Tabla)
                self.cuerpo_si.ejecutar_3D(novo)
            else:
                condicional = "if (!" + valor_exec.temp_str() + ") goto out" + str(id(self.cuerpo_no)) + " ;"
                Tabla.nuevo_codigo_3d(condicional)
                novo = TablaDeSimbolos(Tabla)
                self.cuerpo_si.ejecutar_3D(novo)
                condicional = "goto out" + self.nombre_padre + "; "
                Tabla.nuevo_codigo_3d(condicional)
                condicional = "out" + str(id(self.cuerpo_no)) + ": "
                Tabla.nuevo_codigo_3d(condicional)
                novo = TablaDeSimbolos(Tabla)
                self.cuerpo_no.nombre_padre = self.nombre_padre
                self.cuerpo_no.ejecutar_3D(novo)
コード例 #18
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)+":")