com.jogamp.gluegen.jgram.Test Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of gluegen-rt Show documentation
Show all versions of gluegen-rt Show documentation
JNI binding generator (runtime)
package com.jogamp.gluegen.jgram;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.Reader;
import java.util.Iterator;
import java.util.Set;
class Test {
static boolean showTree = false;
public static void main(final 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.jogamp.gluegen.jgram.Test [-showtree] "+
"");
}
catch(final 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(final File f)
throws Exception {
// If this is a directory, walk each file/dir in that directory
if (f.isDirectory()) {
final 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(final String f, final Reader r)
throws Exception {
try {
// Create a scanner that reads from the input stream passed to us
final JavaLexer lexer = new JavaLexer(r);
lexer.setFilename(f);
// Create a parser that reads from the scanner
final 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(final Iterator iter = set.iterator(); iter.hasNext(); ) {
final String s = iter.next();
System.out.println(s);
}
System.out.println("Functions");
set = parser.getParsedFunctionNames();
for(final Iterator iter = set.iterator(); iter.hasNext(); ) {
final String s = iter.next();
System.out.println(s);
}
// do something with the tree
//doTreeAction(f, parser.getAST(), parser.getTokenNames());
}
catch (final 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();
}
} */
}