상속: BoolExp
예제 #1
0
    public void CompareExp(CompareExp e)
    {
	Label TrueLabel = il.DefineLabel();
	Label EndLabel = il.DefineLabel();
	e.Left.Visit(this);
	e.Right.Visit(this);
	switch(e.Oper){
	case Operator.LT:
	    il.Emit(OpCodes.Blt, TrueLabel);
	    break;
	case Operator.GT:
	    il.Emit(OpCodes.Bgt, TrueLabel);
	    break;
	case Operator.EQ:
	    il.Emit(OpCodes.Beq, TrueLabel);
	    break;
	case Operator.LE:
	    il.Emit(OpCodes.Ble, TrueLabel);
	    break;
	case Operator.GE:
	    il.Emit(OpCodes.Bge, TrueLabel);
	    break;

	}
	il.Emit(OpCodes.Ldc_I4_0);
	il.Emit(OpCodes.Br, EndLabel);
	il.MarkLabel(TrueLabel);
	il.Emit(OpCodes.Ldc_I4_1);
	il.MarkLabel(EndLabel);
	
    }
예제 #2
0
파일: typecheck.cs 프로젝트: ArildF/masters
    public void CompareExp(CompareExp e)
    {
	e.Left.Visit(this);
	CheckInt(e.Left);
	e.Right.Visit(this);
	CheckInt(e.Right);
	if (e.Left.ExpType != typeof(int)){
	    if (e.Left is CarExp){
		e.Left = new ToIntExp(e.Left);
	    }
	    else{
		Console.WriteLine("Error 101: Cannot Convert expression to Int");
		success = false;
	    }
	    
	}
	if (e.Right.ExpType != typeof(int)){
	    if (e.Right is CarExp){
		e.Right = new ToIntExp(e.Right);
	    }
	    else{
		Console.WriteLine("Error 102: Connot Convert expression to Int");
		success = false;
	    }
	}
	e.ExpType = typeof(bool);
    }