summaryrefslogtreecommitdiffstats
path: root/src/java/com/sun/gluegen/jgram/Test.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/java/com/sun/gluegen/jgram/Test.java')
-rw-r--r--src/java/com/sun/gluegen/jgram/Test.java132
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();
+ }
+
+ } */
+}
+