public static void main(String [] args)
		throws Exception
	{
		if (args.length <= 0)	{
			System.err.println("SYNTAX: java "+JavaParser.class.getName()+" file.java [file.java ...]");
			System.err.println("	Example Java Parser");
		}
		else	{
			TimeStopper timer = new TimeStopper();

			// read the syntax from EBNF file
			Reader syntaxInput = new InputStreamReader(JavaParser.class.getResourceAsStream("Java.syntax"));
			
			/* building from scratch, takes 4200 millis
			SyntaxBuilder builder = new SyntaxBuilder(syntaxInput);
			Lexer lexer = builder.getLexer();
			lexer.setDebug(true);
			ParserTables tables = new LALRParserTables(builder.getParserSyntax());
			Parser parser = new Parser(tables);
			parser.setLexer(lexer);
			*/
			
			/* building with precompiled tables, takes 1600 millis
			SyntaxBuilder builder = new SyntaxBuilder(syntaxInput);
			Lexer lexer = builder.getLexer();
			ParserTables tables = new CompiledTables().get(builder.getParserSyntax(), "Java");
			Parser parser = new Parser(tables);
			parser.setLexer(lexer);
			*/
			
			/* building serialized parser, takes 740 millis */
			Parser parser = new SerializedParser().get(null, syntaxInput, "Java");
			System.err.println("time to build Java file parser was "+timer.getInterval());

			//parser.getParserTables().dumpSyntaxNodes(System.out);
			//parser.getParserTables().dump(System.err);
			
			// we want to receive Java comments and spaces/newlines
			parser.getLexer().addTokenListener(new Lexer.TokenListener()	{
				public void tokenReceived(Token token, boolean ignored) {
					if (ignored)	{
						System.err.println("------------- Ignored Token Received -------------------");
						System.err.println(token.text);
						System.err.println("--------------------------------------------------------");
					}
				}
			});

			for (int i = 0; i < args.length; i++)	{
				String fileToParse = args[i];
				FileReader parseInput = new FileReader(fileToParse);
				System.err.println("========================================================");
				System.err.println("Parsing: "+fileToParse);

				parser.setInput(parseInput);	// set file input to lexer
				boolean ok = parser.parse(new PrintSemantic());	// parse input

				System.err.println("========================================================");
				System.err.println("Parsing result from "+fileToParse+" is: "+ok+", parsing took "+timer.getInterval()+" millis");
			}
		}
	}