1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
|
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] "+
"<directory or file name>");
}
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<String> set = parser.getParsedEnumNames();
System.out.println("Enums");
for(final Iterator<String> iter = set.iterator(); iter.hasNext(); ) {
final String s = iter.next();
System.out.println(s);
}
System.out.println("Functions");
set = parser.getParsedFunctionNames();
for(final Iterator<String> 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();
}
} */
}
|