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"
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"
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;")
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)
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
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 + ":")
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
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)
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
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 + ":")
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) + ";")
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 + ":")
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
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)
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
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
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)
def ejecutar_3D(self, Tabla:TablaDeSimbolos): if Tabla.nueva_etiqueta(self.nombre,self.tupla) is None: Tabla.nuevo_codigo_3d("ETI"+str(self.nombre)+":")