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