コード例 #1
0
        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);
        }
コード例 #2
0
        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));
        }
コード例 #3
0
        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));
        }
コード例 #4
0
        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));
        }