示例#1
0
文件: Menor.cs 项目: xiul/TinySharp
 public override void generar(Emit.ILGenerator il)
 {
     ExprIzq.generar(il);
     ExprDer.generar(il);
     il.Emit(Emit.OpCodes.Clt);
 }
示例#2
0
 public void ejecutarMetodo(Emit.ILGenerator il, ListaParametros lp)
 {
     cuerpoDelMetodo(il, lp);
 }
示例#3
0
 public override void generar(Emit.ILGenerator il)
 {
     throw new NotImplementedException();
 }
示例#4
0
 public abstract void generar(Emit.ILGenerator il);
示例#5
0
 public override void generar(Emit.ILGenerator il)
 {
     this.Expr.generar(il);
     TinyCompiler.generador.GeneradorCodigo.Almacenar(Id.Nombre.Texto,il);
 }
示例#6
0
 public override void generar(Emit.ILGenerator il)
 {
     Sentencias.generar(il);
 }
示例#7
0
文件: Igual.cs 项目: xiul/TinySharp
 public override void generar(Emit.ILGenerator il)
 {
     this.ExprIzq.generar(il);
     this.ExprDer.generar(il);
     il.Emit(Emit.OpCodes.Ceq);
 }
示例#8
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]);
     }
 }
示例#9
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);
        }
示例#10
0
 public override void generar(Emit.ILGenerator il)
 {
     List<FuncionDef> funs = NucleoLenguaje.Instancia.getFuncBasicas();
     foreach (FuncionDef fun in funs)
     {
         if(Id.Texto.Equals(fun.Nombre.Texto))
             fun.ejecutarMetodo(il, this.Params);
     }
 }
示例#11
0
 public override void generar(Emit.ILGenerator il)
 {
     il.Emit(Emit.OpCodes.Ldc_I4, TinyCompiler.generador.GeneradorCodigo.convertir_a_entero(Token.Texto));
 }
示例#12
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);
        }