Example #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);
        }
    }
}
Example #2
0
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;
    }

}
Example #3
0
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;
    }

}
Example #4
0
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;
    }

}
Example #5
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);
        }
    }
}