diff options
Diffstat (limited to 'src/java/com/sun/gluegen/jgram/Test.java')
-rw-r--r-- | src/java/com/sun/gluegen/jgram/Test.java | 132 |
1 files changed, 132 insertions, 0 deletions
diff --git a/src/java/com/sun/gluegen/jgram/Test.java b/src/java/com/sun/gluegen/jgram/Test.java new file mode 100644 index 0000000..996d645 --- /dev/null +++ b/src/java/com/sun/gluegen/jgram/Test.java @@ -0,0 +1,132 @@ +package com.sun.gluegen.jgram; + +import java.util.*; + +import java.io.*; +// import antlr.collections.AST; +import antlr.collections.impl.*; +import antlr.debug.misc.*; +import antlr.*; +// import java.awt.event.*; + +class Test { + + static boolean showTree = 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 ) { + System.err.println("Parsing..."); + + // for each directory/file specified on the command line + for(int i=0; i< args.length;i++) { + if ( args[i].equals("-showtree") ) { + showTree = true; + } + else { + doFile(new File(args[i])); // parse it + } + } } + else + System.err.println("Usage: java com.sun.gluegen.jgram.Test [-showtree] "+ + "<directory or file name>"); + } + catch(Exception e) { + System.err.println("exception: "+e); + e.printStackTrace(System.err); // 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.length; i++) + doFile(new File(f, files[i])); + } + + // otherwise, if this is a java file, parse it! + else if ((f.getName().length()>5) && + f.getName().substring(f.getName().length()-5).equals(".java")) { + System.err.println(" "+f.getAbsolutePath()); + // parseFile(f.getName(), new FileInputStream(f)); + parseFile(f.getName(), new BufferedReader(new FileReader(f))); + } + } + + // Here's where we do the real work... + public static void parseFile(String f, Reader r) + throws Exception { + try { + // Create a scanner that reads from the input stream passed to us + JavaLexer lexer = new JavaLexer(r); + lexer.setFilename(f); + + // Create a parser that reads from the scanner + JavaParser parser = new JavaParser(lexer); + parser.setFilename(f); + + // start parsing at the compilationUnit rule + parser.compilationUnit(); + + Set set = parser.getParsedEnumNames(); + System.out.println("Enums"); + for(Iterator iter = set.iterator(); iter.hasNext(); ) { + String s = (String) iter.next(); + System.out.println(s); + } + System.out.println("Functions"); + set = parser.getParsedFunctionNames(); + for(Iterator iter = set.iterator(); iter.hasNext(); ) { + String s = (String) iter.next(); + System.out.println(s); + } + + // do something with the tree + //doTreeAction(f, parser.getAST(), parser.getTokenNames()); + } + catch (Exception e) { + System.err.println("parser exception: "+e); + e.printStackTrace(); // so we can get stack trace + } + } + + /* + public static void doTreeAction(String f, AST t, String[] tokenNames) { + if ( t==null ) return; + if ( showTree ) { + ((CommonAST)t).setVerboseStringConversion(true, tokenNames); + ASTFactory factory = new ASTFactory(); + AST r = factory.create(0,"AST ROOT"); + r.setFirstChild(t); + final ASTFrame frame = new ASTFrame("Java 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); + } + } + ); + // System.out.println(t.toStringList()); + } + JavaTreeParser tparse = new JavaTreeParser(); + try { + tparse.compilationUnit(t); + // System.out.println("successful walk of result AST for "+f); + } + catch (RecognitionException e) { + System.err.println(e.getMessage()); + e.printStackTrace(); + } + + } */ +} + |