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 gencode(Program prog, FILE * target, SymbolTable *table) { Statements *stmts = prog.statements; Statement stmt; while(stmts != NULL){ stmt = stmts->first; switch(stmt.type){ char find_reg ; case Print: find_reg = find_register(stmt.stmt.variable, table); fprintf(target,"l%c\n",find_reg); fprintf(target,"p\n"); break; case Assignment: find_reg = find_register(stmt.stmt.assign.id, table); fprint_expr(target, stmt.stmt.assign.expr,table); fprintf(target,"s%c\n",find_reg); //fprintf(target,"0 k\n"); if(stmt.stmt.assign.type == Int){ fprintf(target,"0 k\n"); } else if(stmt.stmt.assign.type == Float){ fprintf(target,"5 k\n"); } break; } stmts=stmts->rest; } }
void gencode(Program prog, FILE * target,HashTable *Htable)//changed { Statements *stmts = prog.statements; Statement stmt; while(stmts != NULL){ stmt = stmts->first; switch(stmt.type){ case Print: fprintf(target,"l%c\n",HashName(stmt.stmt.variable, Htable)); fprintf(target,"p\n"); break; case Assignment: fprint_expr(target, stmt.stmt.assign.expr, Htable); /* if(stmt.stmt.assign.type == Int){ fprintf(target,"0 k\n"); } else if(stmt.stmt.assign.type == Float){ fprintf(target,"5 k\n"); }*/ fprintf(target,"s%c\n",HashName(stmt.stmt.assign.id, Htable)); fprintf(target,"0 k\n"); break; } stmts=stmts->rest; } }
void gencode(Program prog, FILE * target) { Statements *stmts = prog.statements; Statement stmt; while(stmts != NULL){ stmt = stmts->first; switch(stmt.type){ case Print: fprintf(target,"l%c\n",stmt.stmt.regId); fprintf(target,"p\n"); break; case Assignment: fprint_expr(target, stmt.stmt.assign.expr); /* if(stmt.stmt.assign.type == Int){ fprintf(target,"0 k\n"); } else if(stmt.stmt.assign.type == Float){ fprintf(target,"5 k\n"); }*/ fprintf(target,"s%c\n",stmt.stmt.assign.regId); fprintf(target,"5 k\n"); break; } stmts=stmts->rest; } }
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); } } }