예제 #1
0
 public override void Emit( )
 {
     if (OpToken.Kind == TokenKindSymbol.ADD)
     {
         RightExp.Emit();
     }
     else
     {
         if (ZTypeUtil.IsFloat(RetType))//(RetType.SharpType == typeof(float))
         {
             IL.Emit(OpCodes.Ldc_R4, 0.0);
         }
         else if (ZTypeUtil.IsInt(RetType))//if (RetType.SharpType == typeof(int))
         {
             EmitHelper.LoadInt(IL, 0);
         }
         RightExp.Emit();
         IL.Emit(OpCodes.Sub);
     }
     base.EmitConv();
 }
예제 #2
0
 public override Stmt Analy()
 {
     //TimesExp.IsTopExp = true;
     TimesExp = AnalyRepeateExpRaw(Raw.TimesExp);// ParseAnalyRawExp(Raw.TimesExp);
     if (TimesExp == null)
     {
         Errorf(Raw.RepeatToken.Position, "重复语句没有表达式");
     }
     else
     {
         TimesExp = TimesExp.Analy();
         if (TimesExp != null && TimesExp.AnalyCorrect)
         {
             if (!ZTypeUtil.IsInt(TimesExp.RetType))
             {
                 Errorf(TimesExp.Position, "结果不是整数");
             }
         }
     }
     CreateEachSymbols();
     //RepeatBody.ProcContext = this.ProcContext;
     RepeatBody.Analy();
     return(this);
 }