1 package expr.tree; 2 3 import java.io.IOException ; 4 import java.io.StringReader ; 5 6 import beaver.Symbol; 7 import beaver.Parser; 8 9 import expr.tree.ast.*; 10 11 class Printer 12 { 13 static public void main(String [] args) throws IOException , Parser.Exception 14 { 15 ExpressionParser parser = new ExpressionParser(); 16 ExpressionScanner input = new ExpressionScanner(new StringReader (args[0])); 17 Expr expr = (Expr) parser.parse(input); 18 TreeWalker printer = new TreeWalker() 19 { 20 int tab = 0; 21 22 void startLine(Expr expr) 23 { 24 System.out.print(Symbol.getLine(expr.getStart())); 25 System.out.print(','); 26 System.out.print(Symbol.getColumn(expr.getStart())); 27 System.out.print('-'); 28 System.out.print(Symbol.getLine(expr.getEnd())); 29 System.out.print(','); 30 System.out.print(Symbol.getColumn(expr.getEnd())); 31 System.out.print(":\t"); 32 for (int i = 0; i < tab; i++) 33 System.out.print(" "); 34 } 35 36 public void visit(ErrExpr expr) 37 { 38 startLine(expr); 39 System.out.print(" [E] "); 40 System.out.println("*** error ***"); 41 } 42 43 public void visit(NumExpr expr) 44 { 45 startLine(expr); 46 System.out.print(" [=] "); 47 System.out.println(expr.value); 48 } 49 50 public void visit(NegExpr expr) 51 { 52 startLine(expr); 53 System.out.println(" +/- "); 54 55 tab++; 56 super.visit(expr); 57 tab--; 58 } 59 60 public void visit(MultExpr expr) 61 { 62 startLine(expr); 63 System.out.println(" [*] "); 64 65 tab++; 66 super.visit(expr); 67 tab--; 68 } 69 70 public void visit(DivExpr expr) 71 { 72 startLine(expr); 73 System.out.println(" [/] "); 74 75 tab++; 76 super.visit(expr); 77 tab--; 78 } 79 80 public void visit(PlusExpr expr) 81 { 82 startLine(expr); 83 System.out.println(" [+] "); 84 85 tab++; 86 super.visit(expr); 87 tab--; 88 } 89 90 public void visit(MinusExpr expr) 91 { 92 startLine(expr); 93 System.out.println(" [-] "); 94 95 tab++; 96 super.visit(expr); 97 tab--; 98 } 99 }; 100 expr.accept(printer); 101 } 102 } | Popular Tags |