KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > expr > tree > Printer


1 package expr.tree;
2
3 import java.io.IOException JavaDoc;
4 import java.io.StringReader JavaDoc;
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 JavaDoc[] args) throws IOException JavaDoc, Parser.Exception
14     {
15         ExpressionParser parser = new ExpressionParser();
16         ExpressionScanner input = new ExpressionScanner(new StringReader JavaDoc(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