Beispiel #1
0
void fprint_expr( FILE *target, Expression *expr,HashTable *Htable)//changed
{

    if(expr->leftOperand == NULL){
        switch( (expr->v).type ){
            case Identifier:
                fprintf(target,"l%c\n",HashName((expr->v).val.id, Htable));
                break;
            case IntConst:
                fprintf(target,"%d\n",(expr->v).val.ivalue);
                break;
            case FloatConst:
                fprintf(target,"%f\n", (expr->v).val.fvalue);
                break;
            default:
                fprintf(target,"Error In fprint_left_expr. (expr->v).type=%d\n",(expr->v).type);
                break;
        }
    }
    else{
        fprint_expr(target, expr->leftOperand, Htable);
        if(expr->rightOperand == NULL){
            fprintf(target,"5k\n");
        }
        else{
            //	fprint_right_expr(expr->rightOperand);
            fprint_expr(target, expr->rightOperand ,Htable);
            fprint_op(target, (expr->v).type);
        }
    }
}
Beispiel #2
0
void fprint_expr( FILE *target, Expression *expr, SymbolTable *table)
{

    if(expr->leftOperand == NULL){
        char find_reg ;
		switch( (expr->v).type ){
            case Identifier:
			    find_reg = find_register((expr->v).val.id,table);
                fprintf(target,"l%c\n",find_reg);
                break;
            case IntConst:
				if((expr->v).val.ivalue < 0)
					fprintf(target,"_%d\n",-1 * (expr->v).val.ivalue);
				else
					fprintf(target,"%d\n",(expr->v).val.ivalue);
                break;
            case FloatConst:
                fprintf(target,"%f\n", (expr->v).val.fvalue);
                break;
            default:
                fprintf(target,"Error In fprint_left_expr. (expr->v).type=%d\n",(expr->v).type);
                break;
        }
    }
    else{
        fprint_expr(target, expr->leftOperand,table);
        /*
		if(expr->rightOperand == NULL && expr->v.type == IntToFloatConvertNode) {         // type convert
            fprintf(target,"5k\n");
        }
		*/
		if(expr->rightOperand == NULL){
            fprintf(target,"5k\n");
        }
        else{
            //	fprint_right_expr(expr->rightOperand);
            fprint_expr(target, expr->rightOperand,table);
            fprint_op(target, (expr->v).type);
        }
    }
}