Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- --przejscie dwuprzebiegowe - daj mape ktory raz uzyta
- .data
- lbv_a: .long 0
- lbv_b: .long 0
- .text
- .global main
- main:
- visitEAnd (Eand e); Exp ma lt, lf
- lt: String
- lf: String
- visitETrue(ETrue e):
- emit("jmp " + this.lt)
- visitEFalse(EFalse e):
- emit("jmp " + this.lf
- visitENot(ENot e):
- e.exp.visit(new Visitor(lt=this.lf, lf=this.lt));
- visitEAnd(EAnd e):
- String nl = labelGENERATOR.newLabel()
- e.lexp.visit(new Visitor(lt=nl, lf=this.lf))
- emit(nl+":")
- e.vexp.visit(new Visitor(lt=this.lt, lf=this.lf))
- visitEOr(EOr e):
- String ul = LabelAGENERATOR.newLabel()
- e.lexp.visit(new Visitor(lt=this.lt, lf=ul))
- emit("ul:")
- e.rexp.visit(new Visitor(lt=this.lt, lf=this.lf))
- visitERef(ERef e):
- emit("mov lbr_" + e.id + ", %eax")
- emit("test %eax, %eax")
- emit("jz " + this.lf)
- emit("jmp " + this.lt)
- visitSExp(SExp s)
- String lt = LabelGENERATOR.newLabel()
- String lf = LabelGENERATOR.newLabel()
- String lnext = LabelGENERATOR.newLabel()
- s.exp.visit(new ExpVisitor(lt=lt, lf=lf))
- emit("lt +":")
- emit("push $fmt_true")
- emit(lnext + ":");
- emit("call printf")
- emit("add $4, %esp")
- labelgGENERATOR - unikalna nazwa
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement