⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 print.java

📁 编译原理大作业---tiger编译器 包括semant,translate,mipsframe,regalloc等所有phase 懂的人自会知道
💻 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 + -