summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIru Cai <mytbk920423@gmail.com>2014-12-13 10:01:22 +0800
committerIru Cai <mytbk920423@gmail.com>2014-12-13 10:01:22 +0800
commitbac983173e07000980b8eb9f82b0b86ca8f7c894 (patch)
treed612d8eba7296a3f4d80abbe10cbd1a45d9dc849
parent8d3a30913b6e67bb0e88166feb50fad535341e30 (diff)
downloadminijava-bac983173e07000980b8eb9f82b0b86ca8f7c894.tar.xz
use InputStream and output String
-rw-r--r--src/Main.java8
-rw-r--r--src/minijava/minijava2piglet/Main.java46
-rw-r--r--src/minijava/visitor/GenPigletVisitor.java178
-rw-r--r--src/piglet/piglet2spiglet/Main.java26
-rw-r--r--src/piglet/visitor/GenSpigletVisitor.java48
5 files changed, 166 insertions, 140 deletions
diff --git a/src/Main.java b/src/Main.java
index 461b6f0..19d0aa3 100644
--- a/src/Main.java
+++ b/src/Main.java
@@ -1,7 +1,11 @@
+import aux.CCPrinter;
+
public class Main {
public static void main(String[] args) {
-
-
+ CCPrinter prn_pg, prn_spg;
+ prn_pg = minijava.minijava2piglet.Main.execute(System.in);
+ prn_spg = piglet.piglet2spiglet.Main.execute(prn_pg.toInputStream());
+ prn_spg.printAll();
}
}
diff --git a/src/minijava/minijava2piglet/Main.java b/src/minijava/minijava2piglet/Main.java
index 3af3e26..3e34b66 100644
--- a/src/minijava/minijava2piglet/Main.java
+++ b/src/minijava/minijava2piglet/Main.java
@@ -1,21 +1,20 @@
package minijava.minijava2piglet;
+import java.io.InputStream;
+
+import aux.CCPrinter;
import minijava.MiniJavaParser;
import minijava.ParseException;
import minijava.TokenMgrError;
import minijava.symboltable.MClasses;
import minijava.syntaxtree.Node;
-import minijava.typecheck.PrintError;
import minijava.visitor.BuildSymbolTableVisitor;
-import minijava.visitor.GJDepthFirst;
import minijava.visitor.GenPigletVisitor;
-
public class Main {
-
- public static void main(String[] args) {
- try {
- new MiniJavaParser(System.in);
+ public static CCPrinter execute(InputStream stream) {
+ try {
+ new MiniJavaParser(stream);
Node root = MiniJavaParser.Goal();
// 初始化符号表中最大的类
@@ -36,20 +35,23 @@ public class Main {
* TODO: Implement your own Visitors and other classes.
*
*/
- GJDepthFirst v = new GenPigletVisitor();
+ GenPigletVisitor v = new GenPigletVisitor();
root.accept(v, my_classes);
- }
- catch(TokenMgrError e){
- //Handle Lexical Errors
- e.printStackTrace();
- }
- catch (ParseException e){
- //Handle Grammar Errors
- e.printStackTrace();
- }
- catch(Exception e){
- e.printStackTrace();
- }
-
- }
+ return v.prn;
+ } catch(TokenMgrError e){
+ //Handle Lexical Errors
+ e.printStackTrace();
+ } catch (ParseException e){
+ //Handle Grammar Errors
+ e.printStackTrace();
+ } catch(Exception e){
+ e.printStackTrace();
+ }
+ return null;
+ }
+
+ public static void main(String[] args) {
+ execute(System.in).printAll();
+ }
+
} \ No newline at end of file
diff --git a/src/minijava/visitor/GenPigletVisitor.java b/src/minijava/visitor/GenPigletVisitor.java
index ff21266..c2314e9 100644
--- a/src/minijava/visitor/GenPigletVisitor.java
+++ b/src/minijava/visitor/GenPigletVisitor.java
@@ -5,6 +5,7 @@ package minijava.visitor;
import java.util.Enumeration;
+import aux.CCPrinter;
import minijava.minijava2piglet.PigletBinding;
import minijava.minijava2piglet.PigletLabel;
import minijava.minijava2piglet.PigletTemp;
@@ -17,6 +18,11 @@ public class GenPigletVisitor extends GJDepthFirst<MType, MType> {
int nParams;
int usedParams;
String tmp;
+ public CCPrinter prn;
+
+ public GenPigletVisitor() {
+ prn = new CCPrinter();
+ }
//
// Auto class visitors--probably don't need to be overridden.
//
@@ -99,9 +105,9 @@ public class GenPigletVisitor extends GJDepthFirst<MType, MType> {
*/
public MType visit(MainClass n, MType argu) {
MClasses all_classes = (MClasses)argu;
- System.out.println("MAIN");
+ prn.println("MAIN");
n.f14.accept(this, all_classes.main_class.findMethodByName("main"));
- System.out.println("\nEND\n");
+ prn.println("\nEND\n");
return null;
}
@@ -187,9 +193,9 @@ public class GenPigletVisitor extends GJDepthFirst<MType, MType> {
MMethod the_method = m_class.findMethodByName(method_name);
int nParams = the_method.paramList.size();
- System.out.println(m_class.getName() + "_" + method_name
+ prn.println(m_class.getName() + "_" + method_name
+ " [ " + Math.min(20,(nParams+1)) +" ] ");
- System.out.println("BEGIN");
+ prn.println("BEGIN");
// generate local variable bindings
the_method.genLocalVarBindings();
@@ -197,10 +203,10 @@ public class GenPigletVisitor extends GJDepthFirst<MType, MType> {
// 语句处理
n.f8.accept(this, the_method);
// 返回表达式
- System.out.print("\nRETURN ");
+ prn.print("\nRETURN ");
n.f10.accept(this, the_method);
- System.out.println("\nEND\n");
+ prn.println("\nEND\n");
return null;
}
@@ -300,11 +306,11 @@ public class GenPigletVisitor extends GJDepthFirst<MType, MType> {
if (binding.write==null) {
// Identifier为TEMP,则使用MOVE
- System.out.print("\nMOVE " + binding.read + " ");
+ prn.print("\nMOVE " + binding.read + " ");
n.f2.accept(this, argu);
} else {
// Identifier为内存单元,使用HSTORE
- System.out.print("\nHSTORE " + binding.write + " ");
+ prn.print("\nHSTORE " + binding.write + " ");
n.f2.accept(this, argu);
}
@@ -327,14 +333,14 @@ public class GenPigletVisitor extends GJDepthFirst<MType, MType> {
// load t_base
String identifier = n.f0.accept(this, null).getName();
PigletBinding binding = m_method.getBinding(identifier);
- System.out.println("\nMOVE " + t_base + " " + binding.read);
+ prn.println("\nMOVE " + t_base + " " + binding.read);
// load index
- System.out.print("\nMOVE " + t_idx + " ");
+ prn.print("\nMOVE " + t_idx + " ");
n.f2.accept(this, argu);
// calculate address
- System.out.print("\nMOVE " + t_idx + " TIMES 4 PLUS 1 " + t_idx);
- System.out.print("\nMOVE " + t_base + " PLUS " + t_base + " " + t_idx);
- System.out.print("\nHSTORE " + t_base + " 0 ");
+ prn.print("\nMOVE " + t_idx + " TIMES 4 PLUS 1 " + t_idx);
+ prn.print("\nMOVE " + t_base + " PLUS " + t_base + " " + t_idx);
+ prn.print("\nHSTORE " + t_base + " 0 ");
n.f5.accept(this, argu);
return null;
}
@@ -349,16 +355,16 @@ public class GenPigletVisitor extends GJDepthFirst<MType, MType> {
* f6 -> Statement()
*/
public MType visit(IfStatement n, MType argu) {
- System.out.print("\nCJUMP ");
+ prn.print("\nCJUMP ");
n.f2.accept(this, argu);
String lb_false = PigletLabel.newLabel();
String lb_end = PigletLabel.newLabel();
- System.out.println(" " + lb_false);
+ prn.println(" " + lb_false);
n.f4.accept(this, argu);
- System.out.println("\nJUMP " + lb_end);
- System.out.print(lb_false+" ");
+ prn.println("\nJUMP " + lb_end);
+ prn.print(lb_false+" ");
n.f6.accept(this, argu);
- System.out.println("\n" + lb_end + " NOOP");
+ prn.println("\n" + lb_end + " NOOP");
return null;
}
@@ -372,12 +378,12 @@ public class GenPigletVisitor extends GJDepthFirst<MType, MType> {
public MType visit(WhileStatement n, MType argu) {
String lb_start = PigletLabel.newLabel();
String lb_end = PigletLabel.newLabel();
- System.out.print("\n" + lb_start + " CJUMP ");
+ prn.print("\n" + lb_start + " CJUMP ");
n.f2.accept(this, argu);
- System.out.println(" " + lb_end);
+ prn.println(" " + lb_end);
n.f4.accept(this, argu);
- System.out.println("\nJUMP " + lb_start);
- System.out.println(lb_end + " NOOP");
+ prn.println("\nJUMP " + lb_start);
+ prn.println(lb_end + " NOOP");
return null;
}
@@ -389,7 +395,7 @@ public class GenPigletVisitor extends GJDepthFirst<MType, MType> {
* f4 -> ";"
*/
public MType visit(PrintStatement n, MType argu) {
- System.out.print("\nPRINT ");
+ prn.print("\nPRINT ");
n.f2.accept(this, argu);
return null;
}
@@ -415,19 +421,19 @@ public class GenPigletVisitor extends GJDepthFirst<MType, MType> {
* f2 -> PrimaryExpression()
*/
public MType visit(AndExpression n, MType argu) {
- System.out.println("\nBEGIN");
+ prn.println("\nBEGIN");
String tmp1 = PigletTemp.newTmp();
String tmp2 = PigletTemp.newTmp();
String lb = PigletLabel.newLabel();
- System.out.println("MOVE " + tmp2 + " 0");
- System.out.print("MOVE " + tmp1 + " ");
+ prn.println("MOVE " + tmp2 + " 0");
+ prn.print("MOVE " + tmp1 + " ");
n.f0.accept(this, argu);
- System.out.println("\nCJUMP " + tmp1 + " " + lb );
- System.out.print("MOVE " + tmp2 + " ");
+ prn.println("\nCJUMP " + tmp1 + " " + lb );
+ prn.print("MOVE " + tmp2 + " ");
n.f2.accept(this, argu);
- System.out.println("\n" + lb + " NOOP");
- System.out.println("RETURN " + tmp2);
- System.out.println("END");
+ prn.println("\n" + lb + " NOOP");
+ prn.println("RETURN " + tmp2);
+ prn.println("END");
return null;
}
@@ -437,9 +443,9 @@ public class GenPigletVisitor extends GJDepthFirst<MType, MType> {
* f2 -> PrimaryExpression()
*/
public MType visit(CompareExpression n, MType argu) {
- System.out.print("LT ");
+ prn.print("LT ");
n.f0.accept(this, argu);
- System.out.print(" ");
+ prn.print(" ");
n.f2.accept(this, argu);
return null;
}
@@ -450,9 +456,9 @@ public class GenPigletVisitor extends GJDepthFirst<MType, MType> {
* f2 -> PrimaryExpression()
*/
public MType visit(PlusExpression n, MType argu) {
- System.out.print("PLUS ");
+ prn.print("PLUS ");
n.f0.accept(this, argu);
- System.out.print(" ");
+ prn.print(" ");
n.f2.accept(this, argu);
return null;
}
@@ -463,9 +469,9 @@ public class GenPigletVisitor extends GJDepthFirst<MType, MType> {
* f2 -> PrimaryExpression()
*/
public MType visit(MinusExpression n, MType argu) {
- System.out.print("MINUS ");
+ prn.print("MINUS ");
n.f0.accept(this, argu);
- System.out.print(" ");
+ prn.print(" ");
n.f2.accept(this, argu);
return null;
}
@@ -476,9 +482,9 @@ public class GenPigletVisitor extends GJDepthFirst<MType, MType> {
* f2 -> PrimaryExpression()
*/
public MType visit(TimesExpression n, MType argu) {
- System.out.print("TIMES ");
+ prn.print("TIMES ");
n.f0.accept(this, argu);
- System.out.print(" ");
+ prn.print(" ");
n.f2.accept(this, argu);
return null;
}
@@ -490,18 +496,18 @@ public class GenPigletVisitor extends GJDepthFirst<MType, MType> {
* f3 -> "]"
*/
public MType visit(ArrayLookup n, MType argu) {
- System.out.println("\nBEGIN");
+ prn.println("\nBEGIN");
String tmp_arr = PigletTemp.newTmp();
String tmp_idx = PigletTemp.newTmp();
String tmp_ret = PigletTemp.newTmp();
- System.out.print("MOVE " + tmp_arr + " ");
+ prn.print("MOVE " + tmp_arr + " ");
n.f0.accept(this, argu);
- System.out.print("\nMOVE " + tmp_idx + " ");
+ prn.print("\nMOVE " + tmp_idx + " ");
n.f2.accept(this, argu);
- System.out.println("\nMOVE " + tmp_arr + " PLUS " + tmp_arr + " TIMES " + tmp_idx + " 4");
- System.out.println("HLOAD " + tmp_ret + " " + tmp_arr + " 4");
- System.out.println("RETURN " + tmp_ret);
- System.out.println("END");
+ prn.println("\nMOVE " + tmp_arr + " PLUS " + tmp_arr + " TIMES " + tmp_idx + " 4");
+ prn.println("HLOAD " + tmp_ret + " " + tmp_arr + " 4");
+ prn.println("RETURN " + tmp_ret);
+ prn.println("END");
return null;
}
@@ -511,13 +517,13 @@ public class GenPigletVisitor extends GJDepthFirst<MType, MType> {
* f2 -> "length"
*/
public MType visit(ArrayLength n, MType argu) {
- System.out.println("\nBEGIN");
+ prn.println("\nBEGIN");
String tmp_arr = PigletTemp.newTmp();
- System.out.print("HLOAD " + tmp_arr + " ");
+ prn.print("HLOAD " + tmp_arr + " ");
n.f0.accept(this, argu);
- System.out.println(" 0");
- System.out.println("RETURN " + tmp_arr);
- System.out.println("END");
+ prn.println(" 0");
+ prn.println("RETURN " + tmp_arr);
+ prn.println("END");
return null;
}
@@ -530,26 +536,26 @@ public class GenPigletVisitor extends GJDepthFirst<MType, MType> {
* f5 -> ")"
*/
public MType visit(MessageSend n, MType argu) {
- System.out.println("\nBEGIN");
+ prn.println("\nBEGIN");
String t_exp = PigletTemp.newTmp();
String t_method = PigletTemp.newTmp();
- System.out.print("MOVE " + t_exp + " ");
+ prn.print("MOVE " + t_exp + " ");
MClass exp_class = (MClass)(n.f0.accept(this, argu));
String m_name = n.f2.accept(this, null).getName();
int m_offs = exp_class.getMethodBinding(m_name);
nParams = exp_class.r_findMethodByName(m_name).paramList.size();
- System.out.println("\nHLOAD " + t_method + " " + t_exp + " 0");
- System.out.println("HLOAD " + t_method + " " + t_method + " " + m_offs);
- System.out.println("RETURN");
- System.out.print("CALL " + t_method + " ( " + t_exp + " ");
+ prn.println("\nHLOAD " + t_method + " " + t_exp + " 0");
+ prn.println("HLOAD " + t_method + " " + t_method + " " + m_offs);
+ prn.println("RETURN");
+ prn.print("CALL " + t_method + " ( " + t_exp + " ");
// arguments in ExpressionList
n.f4.accept(this, argu);
if (nParams>=20) {
- System.out.println("\nRETURN " + tmp);
- System.out.println("END");
+ prn.println("\nRETURN " + tmp);
+ prn.println("END");
}
- System.out.println(" ) ");
- System.out.println("END");
+ prn.println(" ) ");
+ prn.println("END");
MMethod m = exp_class.r_findMethodByName(m_name);
String ret_type_name = m.ret_type_name;
MClass ret_class = exp_class.all_classes.findClassByName(ret_type_name);
@@ -573,17 +579,17 @@ public class GenPigletVisitor extends GJDepthFirst<MType, MType> {
*/
public MType visit(ExpressionRest n, MType argu) {
usedParams++;
- System.out.print(" ");
+ prn.print(" ");
if (nParams>=20 && usedParams==19) {
// allocate the memory
tmp = PigletTemp.newTmp();
- System.out.println("\nBEGIN");
- System.out.println("MOVE " + tmp + " HALLOCATE " + (nParams-18)*4);
+ prn.println("\nBEGIN");
+ prn.println("MOVE " + tmp + " HALLOCATE " + (nParams-18)*4);
// store the first param
- System.out.print("HSTORE " + tmp + " 0 ");
+ prn.print("HSTORE " + tmp + " 0 ");
n.f1.accept(this, argu);
} else if (nParams>=20 && usedParams>=20) {
- System.out.print("\nHSTORE " + tmp + " " + (usedParams-19)*4 + " ");
+ prn.print("\nHSTORE " + tmp + " " + (usedParams-19)*4 + " ");
n.f1.accept(this, argu);
} else {
n.f1.accept(this, argu);
@@ -612,7 +618,7 @@ public class GenPigletVisitor extends GJDepthFirst<MType, MType> {
*/
public MType visit(IntegerLiteral n, MType argu) {
int val = Integer.parseInt(n.f0.tokenImage);
- System.out.print(val+" ");
+ prn.print(val+" ");
return null;
}
@@ -620,7 +626,7 @@ public class GenPigletVisitor extends GJDepthFirst<MType, MType> {
* f0 -> "true"
*/
public MType visit(TrueLiteral n, MType argu) {
- System.out.print(1+" ");
+ prn.print(1+" ");
return null;
}
@@ -628,7 +634,7 @@ public class GenPigletVisitor extends GJDepthFirst<MType, MType> {
* f0 -> "false"
*/
public MType visit(FalseLiteral n, MType argu) {
- System.out.print(0+" ");
+ prn.print(0+" ");
return null;
}
@@ -645,7 +651,7 @@ public class GenPigletVisitor extends GJDepthFirst<MType, MType> {
// argu is some expression in method, should return a class and print the code
MVariable vv = ((MMethod)argu).findVarByName(identifier_name);
MClass the_class = ((MMethod)argu).method_class.all_classes.findClassByName(vv.typename);
- System.out.print( ((MMethod)argu).getBinding(identifier_name).read );
+ prn.print( ((MMethod)argu).getBinding(identifier_name).read );
return the_class;
}
}
@@ -654,7 +660,7 @@ public class GenPigletVisitor extends GJDepthFirst<MType, MType> {
* f0 -> "this"
*/
public MType visit(ThisExpression n, MType argu) {
- System.out.print("TEMP 0 ");
+ prn.print("TEMP 0 ");
return ((MMethod)argu).method_class;
}
@@ -668,15 +674,15 @@ public class GenPigletVisitor extends GJDepthFirst<MType, MType> {
public MType visit(ArrayAllocationExpression n, MType argu) {
String tmp_len = PigletTemp.newTmp();
String tmp_arr = PigletTemp.newTmp();
- System.out.println("\nBEGIN");
- System.out.print("MOVE " + tmp_len + " ");
+ prn.println("\nBEGIN");
+ prn.print("MOVE " + tmp_len + " ");
n.f3.accept(this, argu);
// the first element of the array stores the length
// the rest store the elements
- System.out.println("\nMOVE " + tmp_arr + " HALLOCATE TIMES 4 PLUS 1 " + tmp_len);
- System.out.println("HSTORE " + tmp_arr + " 0 " + tmp_len);
- System.out.println("RETURN " + tmp_arr);
- System.out.println("END");
+ prn.println("\nMOVE " + tmp_arr + " HALLOCATE TIMES 4 PLUS 1 " + tmp_len);
+ prn.println("HSTORE " + tmp_arr + " 0 " + tmp_len);
+ prn.println("RETURN " + tmp_arr);
+ prn.println("END");
return null;
}
@@ -689,7 +695,7 @@ public class GenPigletVisitor extends GJDepthFirst<MType, MType> {
public MType visit(AllocationExpression n, MType argu) {
MClasses all_classes = ((MMethod)argu).method_class.all_classes;
MClass new_class = all_classes.findClassByName(n.f1.accept(this, null).getName());
- System.out.println(new_class.newString());
+ prn.println(new_class.newString());
return new_class;
}
@@ -702,15 +708,15 @@ public class GenPigletVisitor extends GJDepthFirst<MType, MType> {
String tmp = PigletTemp.newTmp();
String result = PigletTemp.newTmp();
- System.out.println("\nBEGIN");
- System.out.println("MOVE " + result + " 1");
- System.out.print("MOVE " + tmp + " ");
+ prn.println("\nBEGIN");
+ prn.println("MOVE " + result + " 1");
+ prn.print("MOVE " + tmp + " ");
n.f1.accept(this, argu);
- System.out.println("\nCJUMP LT 0 " + tmp + " " + false_label);
- System.out.println("MOVE " + result + " 0");
- System.out.println(false_label + " NOOP");
- System.out.println("RETURN " + result);
- System.out.println("END");
+ prn.println("\nCJUMP LT 0 " + tmp + " " + false_label);
+ prn.println("MOVE " + result + " 0");
+ prn.println(false_label + " NOOP");
+ prn.println("RETURN " + result);
+ prn.println("END");
return null;
}
diff --git a/src/piglet/piglet2spiglet/Main.java b/src/piglet/piglet2spiglet/Main.java
index 7c3d01b..a98b708 100644
--- a/src/piglet/piglet2spiglet/Main.java
+++ b/src/piglet/piglet2spiglet/Main.java
@@ -1,6 +1,9 @@
package piglet.piglet2spiglet;
+import java.io.InputStream;
+
+import aux.CCPrinter;
import piglet.ParseException;
import piglet.PigletParser;
import piglet.TokenMgrError;
@@ -10,20 +13,21 @@ import piglet.visitor.GenSpigletVisitor;
import piglet.visitor.ScanTempVisitor;
-public class Main {
-
- public static void main(String[] args) {
- try {
- Node root = new PigletParser(System.in).Goal();
+public class Main {
+ public static CCPrinter execute(InputStream stream) {
+ try {
+ new PigletParser(stream);
+ Node root = PigletParser.Goal();
/*
* TODO: Implement your own Visitors and other classes.
*
*/
- ScanTempVisitor vt = new ScanTempVisitor();
- root.accept(vt);
- GenSpigletVisitor gen = new GenSpigletVisitor();
+ ScanTempVisitor vt = new ScanTempVisitor();
+ root.accept(vt);
+ GenSpigletVisitor gen = new GenSpigletVisitor();
gen.nTemp = Math.max(vt.maxtmp, 20);
root.accept(gen, null);
+ return gen.prn;
}
catch(TokenMgrError e){
//Handle Lexical Errors
@@ -36,6 +40,10 @@ public class Main {
catch(Exception e){
e.printStackTrace();
}
-
+ return null;
+ }
+
+ public static void main(String[] args) {
+ execute(System.in).printAll();
}
} \ No newline at end of file
diff --git a/src/piglet/visitor/GenSpigletVisitor.java b/src/piglet/visitor/GenSpigletVisitor.java
index b7a3cea..cd37ac9 100644
--- a/src/piglet/visitor/GenSpigletVisitor.java
+++ b/src/piglet/visitor/GenSpigletVisitor.java
@@ -2,6 +2,7 @@ package piglet.visitor;
import java.util.Enumeration;
import java.util.Vector;
+import aux.CCPrinter;
import piglet.piglet2spiglet.GenSpigletCtl;
import piglet.piglet2spiglet.PigletExpr;
import piglet.syntaxtree.BinOp;
@@ -42,13 +43,18 @@ public class GenSpigletVisitor extends GJDepthFirst<PigletExpr, GenSpigletCtl> {
final GenSpigletCtl Default = new GenSpigletCtl(GenSpigletCtl.Control.DEFAULT);
final GenSpigletCtl Print = new GenSpigletCtl(GenSpigletCtl.Control.PRINT);
final String BinOPs[] = {"LT", "PLUS", "MINUS", "TIMES" };
+ public CCPrinter prn;
+
+ public GenSpigletVisitor() {
+ prn = new CCPrinter();
+ }
String expr_to_tmp(PigletExpr e) {
if (e.type==PigletExpr.Expr_t.Temp) {
return e.toString();
} else {
nTemp++;
- System.out.println("MOVE TEMP " + nTemp + " " + e.toString());
+ prn.println("MOVE TEMP " + nTemp + " " + e.toString());
return "TEMP " + nTemp;
}
}
@@ -58,7 +64,7 @@ public class GenSpigletVisitor extends GJDepthFirst<PigletExpr, GenSpigletCtl> {
return e.toString();
} else {
nTemp++;
- System.out.println("MOVE TEMP " + nTemp + " " + e.toString());
+ prn.println("MOVE TEMP " + nTemp + " " + e.toString());
return "TEMP " + nTemp;
}
}
@@ -74,9 +80,9 @@ public class GenSpigletVisitor extends GJDepthFirst<PigletExpr, GenSpigletCtl> {
* f4 -> <EOF>
*/
public PigletExpr visit(Goal n, GenSpigletCtl argu) {
- System.out.println("MAIN");
+ prn.println("MAIN");
n.f1.accept(this, argu);
- System.out.println("END");
+ prn.println("END");
n.f3.accept(this, argu);
return null;
}
@@ -99,7 +105,7 @@ public class GenSpigletVisitor extends GJDepthFirst<PigletExpr, GenSpigletCtl> {
public PigletExpr visit(Procedure n, GenSpigletCtl argu) {
String lb = n.f0.f0.toString();
String numarg = n.f2.f0.toString();
- System.out.println(lb + " [ " + numarg + " ]");
+ prn.println(lb + " [ " + numarg + " ]");
n.f4.accept(this, Print);
return null;
}
@@ -123,7 +129,7 @@ public class GenSpigletVisitor extends GJDepthFirst<PigletExpr, GenSpigletCtl> {
* f0 -> "NOOP"
*/
public PigletExpr visit(NoOpStmt n, GenSpigletCtl argu) {
- System.out.println("NOOP");
+ prn.println("NOOP");
return null;
}
@@ -131,7 +137,7 @@ public class GenSpigletVisitor extends GJDepthFirst<PigletExpr, GenSpigletCtl> {
* f0 -> "ERROR"
*/
public PigletExpr visit(ErrorStmt n, GenSpigletCtl argu) {
- System.out.println("ERROR");
+ prn.println("ERROR");
return null;
}
@@ -148,10 +154,10 @@ public class GenSpigletVisitor extends GJDepthFirst<PigletExpr, GenSpigletCtl> {
tmpstr = e.toString();
} else {
nTemp++;
- System.out.println("MOVE TEMP " + nTemp + " " + e.toString());
+ prn.println("MOVE TEMP " + nTemp + " " + e.toString());
tmpstr = "TEMP " + nTemp;
}
- System.out.println("CJUMP " + tmpstr + " " + lb);
+ prn.println("CJUMP " + tmpstr + " " + lb);
return null;
}
@@ -161,7 +167,7 @@ public class GenSpigletVisitor extends GJDepthFirst<PigletExpr, GenSpigletCtl> {
*/
public PigletExpr visit(JumpStmt n, GenSpigletCtl argu) {
String lb = n.f1.f0.toString();
- System.out.println("JUMP " + lb);
+ prn.println("JUMP " + lb);
return null;
}
@@ -178,7 +184,7 @@ public class GenSpigletVisitor extends GJDepthFirst<PigletExpr, GenSpigletCtl> {
String offs = n.f2.f0.toString();
t1 = expr_to_tmp(e1);
t2 = expr_to_tmp(e2);
- System.out.println("HSTORE " + t1 + " " + offs + " " + t2);
+ prn.println("HSTORE " + t1 + " " + offs + " " + t2);
return null;
}
@@ -194,7 +200,7 @@ public class GenSpigletVisitor extends GJDepthFirst<PigletExpr, GenSpigletCtl> {
String t = n.f1.accept(this, Default).toString();
String i = n.f3.f0.toString();
s = expr_to_tmp(e);
- System.out.println("HLOAD " + t + " " + s + " " + i);
+ prn.println("HLOAD " + t + " " + s + " " + i);
return null;
}
@@ -206,7 +212,7 @@ public class GenSpigletVisitor extends GJDepthFirst<PigletExpr, GenSpigletCtl> {
public PigletExpr visit(MoveStmt n, GenSpigletCtl argu) {
PigletExpr t = n.f1.accept(this, Default);
PigletExpr e = n.f2.accept(this, Default);
- System.out.println("MOVE " + t.toString() + " " + e.toString());
+ prn.println("MOVE " + t.toString() + " " + e.toString());
return null;
}
@@ -217,7 +223,7 @@ public class GenSpigletVisitor extends GJDepthFirst<PigletExpr, GenSpigletCtl> {
public PigletExpr visit(PrintStmt n, GenSpigletCtl argu) {
PigletExpr e = n.f1.accept(this, Default);
String s = expr_to_simple(e);
- System.out.println("PRINT " + s);
+ prn.println("PRINT " + s);
return null;
}
@@ -251,14 +257,14 @@ public class GenSpigletVisitor extends GJDepthFirst<PigletExpr, GenSpigletCtl> {
/* a normal expression or a function body */
if (argu.isPrint()) {
// a function body
- System.out.println("BEGIN");
+ prn.println("BEGIN");
/* statement list */
n.f1.accept(this, null);
/* return */
PigletExpr e = n.f3.accept(this, Default);
String ret = expr_to_simple(e);
- System.out.println("RETURN " + ret);
- System.out.println("END");
+ prn.println("RETURN " + ret);
+ prn.println("END");
return null;
} else {
// a normal expression, going to turn to a simpler expression
@@ -304,7 +310,7 @@ public class GenSpigletVisitor extends GJDepthFirst<PigletExpr, GenSpigletCtl> {
String s;
if (!e.isSimple()) {
nTemp++;
- System.out.println("MOVE TEMP " + nTemp + " " + e.toString());
+ prn.println("MOVE TEMP " + nTemp + " " + e.toString());
s = "TEMP " + nTemp;
} else {
s = e.toString();
@@ -326,14 +332,14 @@ public class GenSpigletVisitor extends GJDepthFirst<PigletExpr, GenSpigletCtl> {
/* the first expr can only be temp */
if (!(t1.type==PigletExpr.Expr_t.Temp)) {
nTemp++;
- System.out.println("MOVE TEMP " + nTemp + " " + t1.toString());
+ prn.println("MOVE TEMP " + nTemp + " " + t1.toString());
s1 = "TEMP " + nTemp;
} else {
s1 = t1.toString();
}
if (!t2.isSimple()) {
nTemp++;
- System.out.println("MOVE TEMP " + nTemp + " " + t2.toString());
+ prn.println("MOVE TEMP " + nTemp + " " + t2.toString());
s2 = "TEMP " + nTemp;
} else {
s2 = t2.toString();
@@ -377,7 +383,7 @@ public class GenSpigletVisitor extends GJDepthFirst<PigletExpr, GenSpigletCtl> {
*/
public PigletExpr visit(Label n, GenSpigletCtl argu) {
if (argu.isPrint()) {
- System.out.println(n.f0.toString());
+ prn.println(n.f0.toString());
}
return new PigletExpr(PigletExpr.Expr_t.Label, n.f0.toString());
}