Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  /*
   * Copyright 2003-2007 the original author or authors.
   *
   * Licensed under the Apache License, Version 2.0 (the "License");
   * you may not use this file except in compliance with the License.
   * You may obtain a copy of the License at
   *
   *     http://www.apache.org/licenses/LICENSE-2.0
   *
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS,
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
 
 package org.codehaus.groovy.antlr;
 
 import java.io.File;
 
 
 import  antlr.ASTFactory;
 import  antlr.CommonAST;
 import  antlr.Token;
 import  antlr.collections.AST;
 import  antlr.debug.misc.ASTFrame;
 
 class Main {
 
     static boolean whitespaceIncluded = false;
 
 	static boolean showTree = false;
     //static boolean xml = false;
 	static boolean verbose = false;
     public static void main(String[] args) {
 		// Use a try/catch block for parser exceptions
 		try {
 			// if we have at least one command-line argument
 			if (args.length > 0 ) {
 				..println("Parsing...");
 
 				// for each directory/file specified on the command line
 				for(int i=0; iargs.length;i++) {
 					if ( args[i].equals("-showtree") ) {
 						 = true;
 					}
                     //else if ( args[i].equals("-xml") ) {
                     //    xml = true;
                     //}
 					else if ( args[i].equals("-verbose") ) {
 						 = true;
 					}
 					else if ( args[i].equals("-trace") ) {
 						. = true;
 					}
 					else if ( args[i].equals("-traceParser") ) {
 					}
 					else if ( args[i].equals("-traceLexer") ) {
 						. = true;
 					}
                                         else if ( args[i].equals("-whitespaceIncluded") ) {
                                              = true;
                                         }
                                         else {
 						doFile(new File(args[i])); // parse it
 					}
 				} }
 			else
 				..println("Usage: java -jar groovyc.jar [-showtree] [-verbose] [-trace{,Lexer,Parser}]"+
                                    "<directory or file name>");
 		}
 		catch(Exception e) {
 			..println("exception: "+e);
 			e.printStackTrace(.);   // so we can get stack trace
 		}
 	}
 
 
 	// This method decides what action to take based on the type of
 	//   file we are looking at
 	public static void doFile(File f)
 							  throws Exception {
 		// If this is a directory, walk each file/dir in that directory
 		if (f.isDirectory()) {
 			String files[] = f.list();
 			for(int i=0; i < files.lengthi++)
 				doFile(new File(ffiles[i]));
 		}
 
 		// otherwise, if this is a groovy file, parse it!
 		else if (f.getName().endsWith(".groovy")) {
 			..println(" --- "+f.getAbsolutePath());
			// parseFile(f.getName(), new FileInputStream(f));
            SourceBuffer sourceBuffer = new SourceBuffer();
            UnicodeEscapingReader unicodeReader = new UnicodeEscapingReader(new FileReader(f),sourceBuffer);
            GroovyLexer lexer = new GroovyLexer(unicodeReader);
            unicodeReader.setLexer(lexer);
			parseFile(f.getName(),lexer,sourceBuffer);
		}
	}
	// Here's where we do the real work...
	public static void parseFile(String fGroovyLexer lSourceBuffer sourceBuffer)
								 throws Exception {
		try {
			// Create a parser that reads from the scanner
			GroovyRecognizer parser = GroovyRecognizer.make(l);
            parser.setSourceBuffer(sourceBuffer);
			parser.setFilename(f);
                        
                        if () {
                            GroovyLexer lexer = parser.getLexer();
                            lexer.setWhitespaceIncluded(true);
                            while (true) {
                                Token t = lexer.nextToken();
                                ..println(t);
                                if (t == null || t.getType() == Token.EOF_TYPE)  break;
                            }
                            return;
                        }
			// start parsing at the compilationUnit rule
			..println("parseFile "+f+" => "+parser.getAST());
			// do something with the tree
			doTreeAction(fparser.getAST(), parser.getTokenNames());
		}
		catch (Exception e) {
			..println("parser exception: "+e);
			e.printStackTrace();   // so we can get stack trace		
		}
	}
	public static void doTreeAction(String f, AST tString[] tokenNames) {
		if ( t==null ) return;
		if (  ) {
			CommonAST.setVerboseStringConversion(truetokenNames);
			ASTFactory factory = new ASTFactory();
			AST r = factory.create(0,"AST ROOT");
			r.setFirstChild(t);
			final ASTFrame frame = new ASTFrame("Groovy AST"r);
			frame.setVisible(true);
			frame.addWindowListener(
				new WindowAdapter() {
                   public void windowClosing (WindowEvent e) {
                       frame.setVisible(false); // hide the Frame
                       frame.dispose();
                       System.exit(0);
                   }
		        }
			);
			if ()  ..println(t.toStringList());
		}
        /*if ( xml ) {
			((CommonAST)t).setVerboseStringConversion(true, tokenNames);
			ASTFactory factory = new ASTFactory();
			AST r = factory.create(0,"AST ROOT");
			r.setFirstChild(t);
            XStream xstream = new XStream();
            xstream.alias("ast", CommonAST.class);
			try {
                xstream.toXML(r,new FileWriter(f + ".xml"));
                System.out.println("Written AST to " + f + ".xml");
            } catch (Exception e) {
                System.out.println("couldn't write to " + f + ".xml");
                e.printStackTrace();
            }
			//if (verbose)  System.out.println(t.toStringList());
		}*/
	/*@todo
		GroovyTreeParser tparse = new GroovyTreeParser();
		try {
			tparse.compilationUnit(t);
			if (verbose)  System.out.println("successful walk of result AST for "+f);
		}
		catch (RecognitionException e) {
			System.err.println(e.getMessage());
			e.printStackTrace();
		}
	@todo*/
	}
New to GrepCode? Check out our FAQ X