ifthenelseexp.java
来自「编译原理大作业---tiger编译器 包括semant,translate,m」· Java 代码 · 共 84 行
JAVA
84 行
package Translate;class IfThenElseExp extends Exp { Exp cond, a, b; Temp.Label t; Temp.Label f; Temp.Label join; IfThenElseExp(Exp cc, Exp aa, Exp bb) { cond=cc; a=aa; b=bb; } // ------- unCx -------- public Tree.Stm unCx(Temp.Label tt, Temp.Label ff) { t = new Temp.Label(); f = new Temp.Label(); return new Tree.SEQ( cond.unCx(t,f), new Tree.SEQ( new Tree.SEQ( new Tree.LABEL(t), new Tree.CJUMP(Tree.CJUMP.NE,new Tree.CONST(0),a.unEx(),tt,ff)), new Tree.SEQ( new Tree.LABEL(f), new Tree.CJUMP(Tree.CJUMP.NE,new Tree.CONST(0),b.unEx(),tt,ff)))); } // ------- unEx -------- public Tree.Exp unEx() { Temp.Temp r= new Temp.Temp(); t = new Temp.Label(); f = new Temp.Label(); join = new Temp.Label(); return new Tree.ESEQ( new Tree.SEQ( new Tree.SEQ( cond.unCx(t,f), new Tree.SEQ( new Tree.SEQ( new Tree.LABEL(t), new Tree.MOVE( new Tree.TEMP(r), a.unEx())), new Tree.JUMP(join))), new Tree.SEQ( new Tree.SEQ( new Tree.SEQ( new Tree.LABEL(f), new Tree.MOVE( new Tree.TEMP(r), b.unEx())), new Tree.JUMP(join)), new Tree.LABEL(join))), new Tree.TEMP(r)); } // ------- unNx -------- public Tree.Stm unNx() { t = new Temp.Label(); f = new Temp.Label(); join = new Temp.Label(); Temp.Temp r = new Temp.Temp(); return new Tree.SEQ( new Tree.SEQ( cond.unCx(t,f), new Tree.SEQ( new Tree.SEQ( new Tree.LABEL(t), new Tree.MOVE( new Tree.TEMP(r), a.unEx())), new Tree.JUMP(join))), new Tree.SEQ( new Tree.SEQ( new Tree.SEQ( new Tree.LABEL(f), new Tree.MOVE( new Tree.TEMP(r), b.unEx())), new Tree.JUMP(join)), new Tree.LABEL(join))); }}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?