public void regla_45(Atributo V, Atributo ID, Atributo MASMAS, Desplazamiento despl, int size_int) // TODO: Revisar NO TESTEADA Y TENGO SUEÑO. { //V->ID MASMAS //Crea un temporal V.Lexema = gesTS.crearNuevaTemporal(despl.Despl, V.Tipo.ToString()); var aux1 = gesTS.buscarDesplazamientoTS(V.Lexema); V.TipoOperando = aux1.Item1; V.Operando = aux1.Item2; despl.Despl += size_int; despl.update(); var aux = gesTS.buscarDesplazamientoTS(ID.Lexema); ID.TipoOperando = aux.Item1; ID.Operando = aux.Item2; V.Codigo = new List <Cuarteto>(); V.Codigo.Add(new Cuarteto(Operador.OP_ASIG, ID, null, V)); // asignamos a V el valor del ID antes de incrementar. // generadorDeCodigoObjeto.codegen(Operador.OP_ASIG, ID, null, V); V.Codigo.Add(new Cuarteto(Operador.OP_POST_INC, null, null, ID)); // ahora si incrementamos // generadorDeCodigoObjeto.codegen(Operador.OP_POST_INC,null,null,ID); }
public void regla_34(Atributo R, Atributo R1, Atributo U, Desplazamiento despl, int size_int) { //R->R IGUALIGUAL U //| R.cod = gen("if", R1.lugar, "=", U.lugar, "goto", R.siguiente) || gen(R.lugar, "=", "0") || gen(R.siguiente, ":") || gen(R.lugar, "=", "1") R.Lexema = gesTS.crearNuevaTemporal(despl.Despl, U.Tipo.ToString()); var aux = gesTS.buscarDesplazamientoTS(R.Lexema); R.TipoOperando = aux.Item1; R.Operando = aux.Item2; despl.Despl += size_int; despl.update(); R.Codigo = new List <Cuarteto>(); R.Codigo.AddRange(R1.Codigo); R.Codigo.AddRange(U.Codigo); Atributo rSiguiente = new Atributo(); rSiguiente.TipoOperando = TipoOperando.Etiqueta; rSiguiente.Operando = "r_" + numEtiq + "_siguiente"; numEtiq++; R.Codigo.Add(new Cuarteto(Operador.OP_ASIG, cero, null, R)); R.Codigo.Add(new Cuarteto(Operador.OP_IF_N, R1, U, rSiguiente)); R.Codigo.Add(new Cuarteto(Operador.OP_ASIG, uno, null, R)); R.Codigo.Add(new Cuarteto(Operador.OP_ETIQ, null, null, rSiguiente)); }
public void regla_32(Atributo E, Atributo E1, Atributo R, Desplazamiento despl, int size_int) {// E -> E1 && R /*| E.siguiente = nuevaEtiq() | E.cod = E1.cod ||gen(E.lugar, "=", "1")|| gen("if", E1.lugar, "=", 1, "goto", E.siguiente) || gen (E.lugar, "=", "0") || | gen(E.siguiente, ":") || R.cod || gen("if", R.lugar, "=", 1, "goto", E.fin) || gen(E.lugar, "=", "0") || | gen(E.fin, ":") */ // crear temp y confis. E.Lexema = gesTS.crearNuevaTemporal(despl.Despl, R.Tipo.ToString()); var aux = gesTS.buscarDesplazamientoTS(E.Lexema); E.TipoOperando = aux.Item1; E.Operando = aux.Item2; despl.Despl += size_int; despl.update(); // fin crear temp Atributo etiq_siguiente = nuevaEtiqueta("E_", "siguiente"); Atributo etiq_fin = nuevaEtiqueta("E_", "fin"); E.Codigo = E1.Codigo; E.Codigo.Add(new Cuarteto(Operador.OP_ASIG, uno, null, E)); E.Codigo.Add(new Cuarteto(Operador.OP_IF, E1, uno, etiq_siguiente)); E.Codigo.Add(new Cuarteto(Operador.OP_ASIG, cero, null, E)); E.Codigo.Add(new Cuarteto(Operador.OP_ETIQ, null, null, etiq_siguiente)); E.Codigo.AddRange(R.Codigo); E.Codigo.Add(new Cuarteto(Operador.OP_IF, R, uno, etiq_fin)); E.Codigo.Add(new Cuarteto(Operador.OP_ASIG, cero, null, E)); E.Codigo.Add(new Cuarteto(Operador.OP_ETIQ, null, null, etiq_fin)); }
public void regla_36(Atributo U, Atributo U1, Atributo Suma, Atributo V, Desplazamiento despl, int size_int) { /*U->U Suma V | U.lugar = nuevoTemp() | U.cod = U1.cod || V.cod || gen(U.lugar, "=", U1.lugar, "+", V.lugar)*/ U.Lexema = gesTS.crearNuevaTemporal(despl.Despl, U.Tipo.ToString()); var aux = gesTS.buscarDesplazamientoTS(U.Lexema); U.TipoOperando = aux.Item1; U.Operando = aux.Item2; despl.Despl += size_int; despl.update(); U.Codigo = U1.Codigo; U.Codigo.AddRange(V.Codigo); U.Codigo.Add(new Cuarteto(Operador.OP_PLUS, U1, V, U)); }