Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // ovo ide u main
- while ( !w.empty() ) {
- // W je kopija programa i program je kopija W
- // gotov si kada ceo W izbrises (pojedes) xd
- StmList::iterator S;
- S = w.front(); // S uvek od pocetka
- if ( (*S)->u.kind == T_MOVE && (*S)->u.MOVE.src -> kind == T_CONST
- && ((*S)->u.MOVE.dst) == T_TEMP) {
- // radi i bez (* , moze i S->, al nekad ne radi, zavisi koji tip
- // ti trazi metoda, operacija, cemu pristupas, jbg xd
- program.remove(S); // MOVE INSTRUKCIJE SE DELETUJU
- int reg = (S->u.move.dst ) -> u.TEMP;
- int con = (S->u.move.src) -> u.CONST;
- for(iterProg=program.begin(); iterProg!=program.end();interProg++){
- checkStm( S, reg, con, true, false);
- }
- }
- W.remove(S); // uspesno obradjena 1 instrukcija iz kopije, ide na sledecu ( prvu na pocetku)
- }
- checkStm nista ne radis, on poziva checkExprss
- E sad
- i ovo ti je dato, ti treba da (za B) samo izmenis deo gde je T_MOVE
- checkExp( parametri) {
- switch ( exp->kind){
- case T_MOVE:
- if ( replaceTemp == true){
- if( exp->u.MOVE.dst->u.TEMP == reg){
- exp->u.MOVE.dst->u.CONST=newConst;
- exp->u.MOVE.dst->kind=T_CONST;
- }
- }
- Dodatni:
- case: BIN_OP
- if ( exp->u.BINOP.left ->kind == T_CONST && exp->u.BINOP.right -> == T_CONST)
- if( exp->u.BINOP.op == T_plus) {
- int zbir_dve_const= exp->u.BINOP.left-> u.CONST + exp->u.BINOP.right-> u.CONST;
- exp->u.CONST = zbir_dve_const;
- exp->kind = T_CONST; // vise nije BINOP izraz nego zbir 2 konstante , tj samo konstanta
- }
- else
- int razlika_dve_const= exp->u.BINOP.left-> u.CONST + exp->u.BINOP.right-> u.CONST;
- exp->u.CONST = razlika_dve_const;
- exp->kind = T_CONST;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement