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); } } }
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); } } }