1	package antlr;
2	
3	/**
4	 * <b>SOFTWARE RIGHTS</b>
5	 * <p>
6	 * ANTLR 2.5.0 MageLang Institute, 1998
7	 * <p>
8	 * We reserve no legal rights to the ANTLR--it is fully in the
9	 * public domain. An individual or company may do whatever
10	 * they wish with source code distributed with ANTLR or the
11	 * code generated by ANTLR, including the incorporation of
12	 * ANTLR, or its output, into commerical software.
13	 * <p>
14	 * We encourage users to develop software with ANTLR. However,
15	 * we do ask that credit is given to us for developing
16	 * ANTLR. By "credit", we mean that if you use ANTLR or
17	 * incorporate any source code into one of your programs
18	 * (commercial product, research project, or otherwise) that
19	 * you acknowledge this fact somewhere in the documentation,
20	 * research report, etc... If you like ANTLR and have
21	 * developed a nice tool with the output, please mention that
22	 * you developed it using ANTLR. In addition, we ask that the
23	 * headers remain intact in our source code. As long as these
24	 * guidelines are kept, we expect to continue enhancing this
25	 * system and expect to make other tools available as they are
26	 * completed.
27	 * <p>
28	 * The ANTLR gang:
29	 * @version ANTLR 2.5.0 MageLang Institute, 1998
30	 * @author Terence Parr, <a href=http://www.MageLang.com>MageLang Institute</a>
31	 * @author <br>John Lilley, <a href=http://www.Empathy.com>Empathy Software</a>
32	 */
33	import java.io.*;
34	import antlr.collections.AST;
35	
36	/** Simple class to dump the contents of an AST to the output */
37	public class DumpASTVisitor implements ASTVisitor {
38		protected int level = 0;
39	
40	
41		private void tabs() {
42			for (int i = 0; i < level; i++) {
43				System.out.print("   ");
44			}
45		}
46		public void visit(AST node) {
47			// Flatten this level of the tree if it has no children
48			boolean flatten = /*true*/ false;
49			AST node2;
50			for (node2 = node; node2 != null ; node2 = node2.getNextSibling()) {
51				if (node2.getFirstChild() != null) {
52					flatten = false;
53					break;
54				}
55			}
56	
57			for (node2 = node; node2 != null; node2 = node2.getNextSibling()) {
58				if (!flatten || node2 == node) {
59					tabs();
60				}
61				if ( node2.getText()==null ) {
62					System.out.print("nil");
63				}
64				else {
65					System.out.print(node2.getText());
66				}
67	
68				System.out.print(" [" + node2.getType() + "] ");
69	
70				if (flatten) {
71					System.out.print(" ");
72				}
73				else {
74					System.out.println("");
75				}
76	
77				if ( node2.getFirstChild() != null ) {
78					level++;
79					visit(node2.getFirstChild());
80					level--;
81				}
82			}
83	
84			if (flatten) {
85				System.out.println("");
86			}
87		}
88	}
89