📄 print.java
字号:
package Tree;public class Print { java.io.PrintStream out,fout; Temp.TempMap tmap; int write=0; int video=0; private int nTrace=0, nIstr=0, nIstrPrimaCanon=0, nDFrag=0, nPFrag=0; // Per contare le istr CI, i blocchi, i frags prodotti dal compilatore public Print(java.io.PrintStream o, Temp.TempMap t) {out=o; tmap=t;} public Print(java.io.PrintStream o,int dflag) {out=o; tmap=new Temp.DefaultMap(); video=dflag;} public Print(java.io.PrintStream o,java.io.PrintStream f,int dflag) { out=o; tmap=new Temp.DefaultMap(); write=1; fout=f; video=dflag; } // inserito da noi public void prFrags(Translate.Frag f) { while(f!=null) { if(f instanceof Translate.ProcFrag) { Translate.ProcFrag pf=(Translate.ProcFrag)f; nPFrag++; // incremento il numero totale di Proc Frag prodotti if(video==1) out.println("\nTipo: PROC-FRAG" + " Frame = " + pf.frame.name +"\n"); if(write==1) fout.println("\nTipo: PROC-FRAG" + " Frame = " + pf.frame.name +"\n"); prStm(pf.body); } else { Translate.DataFrag df=(Translate.DataFrag)f; nDFrag++; // incremento il numero totale di Data Frag prodotti if(video==1) out.print("\nTipo: DATA-FRAG"); if(video==1) out.print(" String = \"" +df.data + "\"\n"); if(write==1) { fout.print("\nTipo: DATA-FRAG"); fout.print(" String = \"" +df.data + "\"\n"); } } f=f.next; } if(video==1) out.print("\n"); if(write==1) fout.print("\n"); nIstrPrimaCanon=nIstr; // mi salvo il numero di istruzioni nIstr=0; // riazzero il numero di Istruzioni perche' dovro' ricontarle una volta canonizzato } public void prStmlistlist(Canon.StmListList slist) { while(slist!=null) { while(slist.head!=null) { if(video==1) out.println(""); if(write==1) fout.println(""); prStm(slist.head.head,0); slist.head=slist.head.tail; } if(video==1) out.println("\n\n"); if(write==1) fout.println("\n\n"); slist=slist.tail; nTrace++; } } // Restituisce il numero dei blocchi prodotti public int getNumTrace() { return nTrace; } // Restituisce il numero di istruzioni CI prodotte prima della canonizzazione public int getNumIstrPrimaCanon() { return nIstrPrimaCanon; } // Restituisce il numero di istruzioni CI prodotte public int getNumIstr() { return nIstr; } // Restituisce il numero dei ProcFrag public int getNumPFrag() { return nPFrag; } // Restituisce il numero dei DataFrag public int getNumDFrag() { return nDFrag; } // inserito da noi void indent(int d) { for(int i=0; i<d; i++) { if(video==1) out.print(' '); if(write==1) fout.print(' '); } } void say(String s) { if(video==1) out.print(s); if(write==1) fout.print(s); } void sayln(String s) { say(s); say("\n"); } void prStm(SEQ s, int d) { indent(d); sayln("SEQ("); prStm(s.left,d+1); sayln(","); prStm(s.right,d+1); say(")"); nIstr++; } void prStm(LABEL s, int d) { indent(d); say("LABEL "); say(s.label.toString()); nIstr++; } void prStm(JUMP s, int d) { indent(d); sayln("JUMP("); prExp(s.exp, d+1); say(")"); nIstr++; } void prStm(CJUMP s, int d) { indent(d); say("CJUMP("); switch(s.relop) { case CJUMP.EQ: say("EQ"); break; case CJUMP.NE: say("NE"); break; case CJUMP.LT: say("LT"); break; case CJUMP.GT: say("GT"); break; case CJUMP.LE: say("LE"); break; case CJUMP.GE: say("GE"); break; case CJUMP.ULT: say("ULT"); break; case CJUMP.ULE: say("ULE"); break; case CJUMP.UGT: say("UGT"); break; case CJUMP.UGE: say("UGE"); break; default: throw new Error("Print.prStm.CJUMP"); } sayln(","); prExp(s.left,d+1); sayln(","); prExp(s.right,d+1); sayln(","); indent(d+1); say(s.iftrue.toString()); say(","); say(s.iffalse.toString()); say(")"); nIstr++; } void prStm(MOVE s, int d) { indent(d); sayln("MOVE("); prExp(s.dst,d+1); sayln(","); prExp(s.src,d+1); say(")"); nIstr++; } void prStm(EXP s, int d) { indent(d); sayln("EXP("); prExp(s.exp,d+1); say(")"); nIstr++; } public void prStm(Stm s, int d) { if (s instanceof SEQ) prStm((SEQ)s, d); else if (s instanceof LABEL) prStm((LABEL)s, d); else if (s instanceof JUMP) prStm((JUMP)s, d); else if (s instanceof CJUMP) prStm((CJUMP)s, d); else if (s instanceof MOVE) prStm((MOVE)s, d); else if (s instanceof EXP) prStm((EXP)s, d); else throw new Error("Print.prStm"); } void prExp(BINOP e, int d) { indent(d); say("BINOP("); switch(e.binop) { case BINOP.PLUS: say("PLUS"); break; case BINOP.MINUS: say("MINUS"); break; case BINOP.MUL: say("MUL"); break; case BINOP.DIV: say("DIV"); break; case BINOP.AND: say("AND"); break; case BINOP.OR: say("OR"); break; case BINOP.LSHIFT: say("LSHIFT"); break; case BINOP.RSHIFT: say("RSHIFT"); break; case BINOP.ARSHIFT: say("ARSHIFT"); break; case BINOP.XOR: say("XOR"); break; default: throw new Error("Print.prExp.BINOP"); } sayln(","); prExp(e.left,d+1); sayln(","); prExp(e.right,d+1); say(")"); nIstr++; } void prExp(MEM e, int d) { indent(d); sayln("MEM("); prExp(e.exp,d+1); say(")"); nIstr++; } void prExp(TEMP e, int d) { indent(d); say("TEMP "); say(tmap.tempMap(e.temp)); nIstr++; } void prExp(ESEQ e, int d) { indent(d); sayln("ESEQ("); prStm(e.stm,d+1); sayln(","); prExp(e.exp,d+1); say(")"); nIstr++; } void prExp(NAME e, int d) { indent(d); say("NAME "); say(e.label.toString()); nIstr++; } void prExp(CONST e, int d) { indent(d); say("CONST "); say(String.valueOf(e.value)); nIstr++; } void prExp(CALL e, int d) { indent(d); sayln("CALL("); prExp(e.func,d+1); for(ExpList a = e.args; a!=null; a=a.tail) { sayln(","); prExp(a.head,d+2); } say(")"); nIstr++; } public void prExp(Exp e, int d) { if (e instanceof BINOP) prExp((BINOP)e, d); else if (e instanceof MEM) prExp((MEM)e, d); else if (e instanceof TEMP) prExp((TEMP)e, d); else if (e instanceof ESEQ) prExp((ESEQ)e, d); else if (e instanceof NAME) prExp((NAME)e, d); else if (e instanceof CONST) prExp((CONST)e, d); else if (e instanceof CALL) prExp((CALL)e, d); else throw new Error("Print.prExp"); } public void prStm(Stm s) {prStm(s,0); say("\n");} public void prExp(Exp e) {prExp(e,0); say("\n");}}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -