Esempio n. 1
0
 public override void generar(Emit.ILGenerator il)
 {
     ExprIzq.generar(il);
     ExprDer.generar(il);
     il.Emit(Emit.OpCodes.Clt);
 }
Esempio n. 2
0
 public override void generar(Emit.ILGenerator il)
 {
     this.ExprIzq.generar(il);
     this.ExprDer.generar(il);
     il.Emit(Emit.OpCodes.Ceq);
 }
Esempio n. 3
0
 public override void generar(Emit.ILGenerator il)
 {
     if (!TinyCompiler.generador.GeneradorCodigo.TablaDireccionesSimbolos.ContainsKey(Nombre.Texto))
     {
         throw new System.Exception("ERROR-0007 fallo en analisis semantico Variable no declarada encontrada durante generacion '" + Nombre.Texto + "'");
     }
     else
     {
         il.Emit(Emit.OpCodes.Ldloc, TinyCompiler.generador.GeneradorCodigo.TablaDireccionesSimbolos[Nombre.Texto]);
     }
 }
Esempio n. 4
0
        public override void generar(Emit.ILGenerator il)
        {
            Emit.LocalBuilder tmpVarLogico;

            Console.WriteLine("Generando Nodo Condicional (IF)");
            this.condicion.generar(il);

            il.Emit(Emit.OpCodes.Ldc_I4_0);  //Ingreso constante 0
            il.Emit(Emit.OpCodes.Ceq);  //Comparo si es falso (es 0)
            //Almaceno este resultado en una variable temporal
            tmpVarLogico = il.DeclareLocal(typeof(bool));
            il.Emit(Emit.OpCodes.Stloc, tmpVarLogico);
            //cargo el resultado de la variable temporal
            il.Emit(Emit.OpCodes.Ldloc, tmpVarLogico);
            Emit.Label bloqueFalso = il.DefineLabel();
            //salto en caso que sea verdadero el resultado es decir es cero la evaluacion del (pila==0) hago el sino
            il.Emit(Emit.OpCodes.Brtrue, bloqueFalso);

            Entonces.generar(il);

            Emit.Label finSi = il.DefineLabel();
            il.Emit(Emit.OpCodes.Br, finSi);
            il.MarkLabel(bloqueFalso);

            if(Sino!=null)
                Sino.generar(il);

            il.MarkLabel(finSi);
        }
Esempio n. 5
0
 public override void generar(Emit.ILGenerator il)
 {
     il.Emit(Emit.OpCodes.Ldc_I4, TinyCompiler.generador.GeneradorCodigo.convertir_a_entero(Token.Texto));
 }
Esempio n. 6
0
        public override void generar(Emit.ILGenerator il)
        {
            Emit.LocalBuilder tmpCondicion;
            tmpCondicion = il.DeclareLocal(typeof(bool));
            Emit.Label sentenciasRepita = il.DefineLabel();
            il.MarkLabel(sentenciasRepita);
            il.Emit(Emit.OpCodes.Nop);		//emito primera sentencia vacia

            Sentencias.generar(il);

            Condicion.generar(il);

            il.Emit(Emit.OpCodes.Stloc, tmpCondicion);  //almaceno resultado de condicion del mientras
            il.Emit(Emit.OpCodes.Ldloc, tmpCondicion);  //cargo resultado de condicion del mientras
            il.Emit(Emit.OpCodes.Brfalse, sentenciasRepita);
        }