1324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver#set( $symbol_pound = '#' )
2324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver#set( $symbol_dollar = '$' )
3324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver#set( $symbol_escape = '\' )
4324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverpackage ${package};
5324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
6324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverimport org.antlr.runtime.*;
7324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverimport org.antlr.runtime.tree.*;
8324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverimport org.antlr.stringtemplate.*;
9324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
10324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverimport java.io.*;
11324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverimport ${package}.TParser.a_return;
12324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
13324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
14324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver/**
15324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * Test driver program for the ANTLR3 Maven Architype demo
16324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver *
17324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * @author Jim Idle (jimi@temporal-wave.com)
18324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver */
19324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverclass Main {
20324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
21324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    private static boolean makeDot = false;
22324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
23324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    static  TLexer lexer;
24324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
25324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    /** Just a simple test driver for the ASP parser
26324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver     * to show how to call it.
27324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver     */
28324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
29324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    	public static void main(String[] args)
30324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        {
31324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver            try
32324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver            {
33324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver                // Create the lexer, which we can keep reusing if we like
34324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver                //
35324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver                lexer = new TLexer();
36324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
37324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver                if  (args.length > 0)
38324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver                {
39324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver                    int s = 0;
40324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
41324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver                    if  (args[0].startsWith("-dot"))
42324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver                    {
43324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver                        makeDot = true;
44324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver                        s = 1;
45324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver                    }
46324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver                    // Recursively parse each directory, and each file on the
47324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver                    // command line
48324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver                    //
49324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver                    for (int i=s; i<args.length; i++)
50324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver                    {
51324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver                        parse(new File(args[i]));
52324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver                    }
53324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver                }
54324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver                else
55324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver                {
56324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver                    System.err.println("Usage: java -jar ${artifactId}-${version}-jar-with-dependencies.jar <directory | filename.dmo>");
57324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver                }
58324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver            }
59324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver            catch (Exception ex)
60324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver            {
61324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver                System.err.println("ANTLR demo parser threw exception:");
62324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver                ex.printStackTrace();
63324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver            }
64324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        }
65324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
66324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        public static void parse(File source) throws Exception
67324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        {
68324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
69324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver            // Open the supplied file or directory
70324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver            //
71324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver            try
72324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver            {
73324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
74324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver                // From here, any exceptions are just thrown back up the chain
75324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver                //
76324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver                if (source.isDirectory())
77324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver                {
78324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver                    System.out.println("Directory: " + source.getAbsolutePath());
79324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver                    String files[] = source.list();
80324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
81324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver                    for (int i=0; i<files.length; i++)
82324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver                    {
83324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver                        parse(new File(source, files[i]));
84324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver                    }
85324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver                }
86324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
87324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver                // Else find out if it is an ASP.Net file and parse it if it is
88324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver                //
89324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver                else
90324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver                {
91324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver                    // File without paths etc
92324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver                    //
93324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver                    String sourceFile = source.getName();
94324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
95324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver                    if  (sourceFile.length() > 3)
96324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver                    {
97324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver                        String suffix = sourceFile.substring(sourceFile.length()-4).toLowerCase();
98324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
99324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver                        // Ensure that this is a DEMO script (or seemingly)
100324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver                        //
101324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver                        if  (suffix.compareTo(".dmo") == 0)
102324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver                        {
103324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver                            parseSource(source.getAbsolutePath());
104324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver                        }
105324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver                    }
106324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver                }
107324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver            }
108324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver            catch (Exception ex)
109324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver            {
110324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver                System.err.println("ANTLR demo parser caught error on file open:");
111324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver                ex.printStackTrace();
112324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver            }
113324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
114324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        }
115324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
116324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        public static void parseSource(String source) throws Exception
117324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        {
118324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver            // Parse an ANTLR demo file
119324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver            //
120324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver            try
121324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver            {
122324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver                // First create a file stream using the povided file/path
123324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver                // and tell the lexer that that is the character source.
124324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver                // You can also use text that you have already read of course
125324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver                // by using the string stream.
126324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver                //
127324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver                lexer.setCharStream(new ANTLRFileStream(source, "UTF8"));
128324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
129324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver                // Using the lexer as the token source, we create a token
130324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver                // stream to be consumed by the parser
131324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver                //
132324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver                CommonTokenStream tokens = new CommonTokenStream(lexer);
133324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
134324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver                // Now we need an instance of our parser
135324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver                //
136324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver                TParser parser = new TParser(tokens);
137324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
138324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver                System.out.println("file: " + source);
139324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
140324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver                // Provide some user feedback
141324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver                //
142324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver                System.out.println("    Lexer Start");
143324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver                long start = System.currentTimeMillis();
144324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
145324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver                // Force token load and lex (don't do this normally,
146324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver                // it is just for timing the lexer)
147324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver                //
148324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver                tokens.LT(1);
149324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver                long lexerStop = System.currentTimeMillis();
150324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver                System.out.println("      lexed in " + (lexerStop - start) + "ms.");
151324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
152324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver                // And now we merely invoke the start rule for the parser
153324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver                //
154324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver                System.out.println("    Parser Start");
155324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver                long pStart = System.currentTimeMillis();
156324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver                a_return psrReturn = parser.a();
157324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver                long stop = System.currentTimeMillis();
158324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver                System.out.println("      Parsed in " + (stop - pStart) + "ms.");
159324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
160324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver                // If we got a valid a tree (the syntactic validity of the source code
161324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver                // was found to be solid), then let's print the tree to show we
162324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver                // did something; our testing public wants to know!
163324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver                // We do something fairly cool here and generate a graphviz/dot
164324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver                // specification for the tree, which will allow the users to visualize
165324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver                // it :-) we only do that if asked via the -dot option though as not
166324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver                // all users will hsve installed the graphviz toolset from
167324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver                // http://www.graphviz.org
168324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver                //
169324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
170324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver                // Pick up the generic tree
171324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver                //
172324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver                Tree t = (Tree)psrReturn.getTree();
173324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
174324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver                // NOw walk it with the generic tree walker, which does nothing but
175324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver                // verify the tree really.
176324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver                //
177324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver                try
178324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver                {
179324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver                    if (parser.getNumberOfSyntaxErrors() == 0) {
180324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver                        TTree walker = new TTree(new CommonTreeNodeStream(t));
181324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver                        System.out.println("    AST Walk Start${symbol_escape}n");
182324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver                        pStart = System.currentTimeMillis();
183324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver                        walker.a();
184324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver                        stop = System.currentTimeMillis();
185324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver                        System.out.println("${symbol_escape}n      AST Walked in " + (stop - pStart) + "ms.");
186324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver                     }
187324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver                }
188324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver                catch(Exception w)
189324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver                {
190324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver                    System.out.println("AST walk caused exception.");
191324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver                    w.printStackTrace();
192324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver                }
193324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
194324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver                if  (makeDot && tokens.size() < 4096)
195324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver                {
196324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
197324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver                    // Now stringify it if you want to...
198324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver                    //
199324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver                    // System.out.println(t.toStringTree());
200324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
201324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver                    // Use the ANLTR built in dot generator
202324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver                    //
203324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver                    DOTTreeGenerator gen = new DOTTreeGenerator();
204324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
205324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver                    // Which we can cause to generate the DOT specification
206324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver                    // with the input file name suffixed with .dot. You can then use
207324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver                    // the graphviz tools or zgrviewer (Java) to view the graphical
208324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver                    // version of the dot file.
209324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver                    //
210324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver                    source = source.substring(0, source.length()-3);
211324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver                    String outputName = source + "dot";
212324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
213324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver                    System.out.println("    Producing AST dot (graphviz) file");
214324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
215324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver                    // It produces a jguru string template.
216324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver                    //
217324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver                    StringTemplate st = gen.toDOT(t, new CommonTreeAdaptor());
218324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
219324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver                    // Create the output file and write the dot spec to it
220324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver                    //
221324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver                    FileWriter outputStream = new FileWriter(outputName);
222324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver                    outputStream.write(st.toString());
223324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver                    outputStream.close();
224324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
225324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver                    // Invoke dot to generate a .png file
226324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver                    //
227324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver                    System.out.println("    Producing png graphic for tree");
228324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver                    pStart = System.currentTimeMillis();
229324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver                    Process proc = Runtime.getRuntime().exec("dot -Tpng -o" + source + "png " + outputName);
230324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver                    proc.waitFor();
231324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver                    stop = System.currentTimeMillis();
232324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver                    System.out.println("      PNG graphic produced in " + (stop - pStart) + "ms.");
233324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver                }
234324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver            }
235324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver            catch (FileNotFoundException ex)
236324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver            {
237324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver                // The file we tried to parse does not exist
238324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver                //
239324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver                System.err.println("${symbol_escape}n  !!The file " + source + " does not exist!!${symbol_escape}n");
240324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver            }
241324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver            catch (Exception ex)
242324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver            {
243324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver                // Something went wrong in the parser, report this
244324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver                //
245324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver                System.err.println("Parser threw an exception:${symbol_escape}n${symbol_escape}n");
246324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver                ex.printStackTrace();
247324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver            }
248324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        }
249324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
250324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver}
251