diff options
author | Safey A.Halim <safey.allah@gmail.com> | 2010-10-28 16:18:41 +0000 |
---|---|---|
committer | Safey A.Halim <safey.allah@gmail.com> | 2010-10-28 16:18:41 +0000 |
commit | 4f7e2fa38eab56d0e084e86204b88c7bbecd8cbd (patch) | |
tree | 358f32fe356d10480c0470769f63864f146a0795 | |
parent | 61abda51be5dcee909dd56a4a15e5e5d94ca097f (diff) | |
download | gnunet-4f7e2fa38eab56d0e084e86204b88c7bbecd8cbd.tar.gz gnunet-4f7e2fa38eab56d0e084e86204b88c7bbecd8cbd.zip |
Seaspider accepts any combination of source files, source directories.
One of the arguments should be the path of the Expressions Database file (a .db file)
-rw-r--r-- | src/monkey/seaspider/org/gnunet/seaspider/ExpressionDatabaseHandler.java | 2 | ||||
-rw-r--r-- | src/monkey/seaspider/org/gnunet/seaspider/Seaspider.java | 164 |
2 files changed, 101 insertions, 65 deletions
diff --git a/src/monkey/seaspider/org/gnunet/seaspider/ExpressionDatabaseHandler.java b/src/monkey/seaspider/org/gnunet/seaspider/ExpressionDatabaseHandler.java index a94f63e77..5b269259b 100644 --- a/src/monkey/seaspider/org/gnunet/seaspider/ExpressionDatabaseHandler.java +++ b/src/monkey/seaspider/org/gnunet/seaspider/ExpressionDatabaseHandler.java | |||
@@ -21,7 +21,7 @@ public class ExpressionDatabaseHandler { | |||
21 | "file_name TEXT NOT NULL , expr_syntax TEXT NOT NULL ," + | 21 | "file_name TEXT NOT NULL , expr_syntax TEXT NOT NULL ," + |
22 | " start_lineno INT, end_lineno INT)"; | 22 | " start_lineno INT, end_lineno INT)"; |
23 | 23 | ||
24 | File dbFile = new File(databasePath + "/GNUnetExpressions.db"); | 24 | File dbFile = new File(databasePath); |
25 | dbFile.delete();/* Delete it if already existent */ | 25 | dbFile.delete();/* Delete it if already existent */ |
26 | 26 | ||
27 | /* Create Expressions database */ | 27 | /* Create Expressions database */ |
diff --git a/src/monkey/seaspider/org/gnunet/seaspider/Seaspider.java b/src/monkey/seaspider/org/gnunet/seaspider/Seaspider.java index 15ad2571c..0c1968eaf 100644 --- a/src/monkey/seaspider/org/gnunet/seaspider/Seaspider.java +++ b/src/monkey/seaspider/org/gnunet/seaspider/Seaspider.java | |||
@@ -1,9 +1,9 @@ | |||
1 | package org.gnunet.seaspider; | 1 | package org.gnunet.seaspider; |
2 | 2 | ||
3 | import java.io.File; | 3 | import java.io.File; |
4 | import java.io.FileFilter; | ||
5 | import java.io.FileInputStream; | 4 | import java.io.FileInputStream; |
6 | import java.io.FileNotFoundException; | 5 | import java.io.FileNotFoundException; |
6 | import java.io.FilenameFilter; | ||
7 | 7 | ||
8 | import org.gnunet.seaspider.parser.CParser; | 8 | import org.gnunet.seaspider.parser.CParser; |
9 | import org.gnunet.seaspider.parser.ParseException; | 9 | import org.gnunet.seaspider.parser.ParseException; |
@@ -12,87 +12,123 @@ import org.gnunet.seaspider.parser.nodes.Node; | |||
12 | 12 | ||
13 | public class Seaspider { | 13 | public class Seaspider { |
14 | 14 | ||
15 | static final boolean DEBUG = false; | 15 | private static final boolean DEBUG = true; |
16 | 16 | private static CParser parser = null; | |
17 | private static boolean isFirstFile = true; | ||
18 | private static int successCount = 0; | ||
19 | private static int failureCount = 0; | ||
20 | private static FilenameFilter filter = new FilenameFilter() { | ||
21 | public boolean accept(File dir, String fileName) { | ||
22 | File file = new File(dir.getPath() + "/" + fileName); | ||
23 | if ((file.isDirectory() && !fileName.startsWith(".")) || (fileName.endsWith(".c") && !fileName.startsWith("test_"))) | ||
24 | /* directories like .svn are of no interest */ | ||
25 | return true; | ||
26 | return false; | ||
27 | } | ||
28 | }; | ||
29 | |||
30 | |||
31 | private static void doParseFile(String filePath) | ||
32 | { | ||
33 | try { | ||
34 | if (isFirstFile) { | ||
35 | parser = new CParser(new FileInputStream(filePath)); | ||
36 | isFirstFile = false; | ||
37 | } | ||
38 | else | ||
39 | parser.ReInit(new FileInputStream(filePath)); | ||
40 | } | ||
41 | catch (FileNotFoundException e) { | ||
42 | /* This should never happen */ | ||
43 | System.err.println("File not found!"); | ||
44 | e.printStackTrace(); | ||
45 | System.exit(1); | ||
46 | } | ||
47 | try { | ||
48 | System.out.println("Parsing file: " + filePath); | ||
49 | Node root = parser.TranslationUnit(); | ||
50 | root.accept(new ExpressionExtractorVisitor(filePath)); | ||
51 | System.out.println("File " + filePath + " parsed successfully."); | ||
52 | successCount++; | ||
53 | } | ||
54 | catch (ParseException e) { | ||
55 | System.out.println("Encountered errors during parsing file " + filePath); | ||
56 | failureCount++; | ||
57 | if (DEBUG) | ||
58 | e.printStackTrace(); | ||
59 | } catch (TokenMgrError e) { | ||
60 | System.err.println("Encountered errors during parsing file " + filePath + ":" + e.getMessage()); | ||
61 | failureCount++; | ||
62 | if (DEBUG) | ||
63 | e.printStackTrace(); | ||
64 | } | ||
65 | } | ||
66 | |||
67 | |||
68 | private static void parseRecursively(String dirPath) | ||
69 | { | ||
70 | File dir = new File(dirPath); | ||
71 | |||
72 | if (!dir.isDirectory()) { | ||
73 | if (dirPath.endsWith(".c")) { | ||
74 | doParseFile(dirPath); | ||
75 | return; | ||
76 | } else /* Probably the Database file */ | ||
77 | return; | ||
78 | } | ||
79 | |||
80 | System.out.println("Reading from: " + dirPath + " source directory..."); | ||
81 | String[] dirContents = dir.list(filter);/* Only directories and .c files */ | ||
82 | for (int i = 0; i < dirContents.length; i++) { | ||
83 | String fullPath = dirPath + "/" + dirContents[i]; | ||
84 | File file = new File(fullPath); | ||
85 | |||
86 | if (file.isDirectory()) | ||
87 | parseRecursively(fullPath); | ||
88 | else | ||
89 | doParseFile(fullPath); /* Path is for a file */ | ||
90 | } | ||
91 | } | ||
92 | |||
17 | public static void main(String args[]) | 93 | public static void main(String args[]) |
18 | { | 94 | { |
19 | CParser parser = null; | 95 | String dbFilePath = null; |
20 | boolean isFirstFile = true; | ||
21 | int fileNotFoundCount = 0; | ||
22 | int successCount = 0; | ||
23 | int failureCount = 0; | ||
24 | 96 | ||
25 | if (args.length != 2) | 97 | if (args.length < 2) |
26 | { | 98 | { |
27 | System.err.println("Invoke seaspider with database filename and source path!"); | 99 | System.err.println("Invoke seaspider with database filename and source path!"); |
28 | System.exit(1); | 100 | System.exit(1); |
29 | } | 101 | } |
30 | System.out.println("Seaspider 0.0\n"); | 102 | System.out.println("Seaspider 0.0\n"); |
31 | System.out.println("Reading from " + args[1] + " source directory..."); | ||
32 | String gnunetSourcePath = args[1]; | ||
33 | |||
34 | /* Filtering out files */ | ||
35 | FileFilter filter = new FileFilter() { | ||
36 | public boolean accept(File file) { | ||
37 | return file.isDirectory(); | ||
38 | } | ||
39 | }; | ||
40 | 103 | ||
41 | /* File filter to get only source files and no test cases */ | ||
42 | FileFilter sourceFilter = new FileFilter() { | ||
43 | public boolean accept(File file) { | ||
44 | String fileName = file.getName(); | ||
45 | return fileName.endsWith(".c") && ! fileName.startsWith("test_"); | ||
46 | } | ||
47 | }; | ||
48 | |||
49 | /* Create the Expressions Database */ | ||
50 | ExpressionDatabaseHandler.createExpressionDatabase(args[0]); | ||
51 | 104 | ||
52 | File[] dirArr = (new File(gnunetSourcePath)).listFiles(filter); | 105 | for (int i = 0; i < args.length; i++) { |
53 | for (int i = 0; i < dirArr.length; i++) { | 106 | if (args[i].endsWith(".db")) |
54 | File dir = dirArr[i]; | 107 | dbFilePath = args[i]; |
55 | File[] fileArr = dir.listFiles(sourceFilter); | 108 | else { |
56 | for (int j = 0; j < fileArr.length; j++) { | 109 | /* Should be a valid path for a file or a directory */ |
57 | try { | 110 | File file = new File(args[i]); |
58 | if (isFirstFile) { | 111 | if (!file.exists()) { |
59 | parser = new CParser(new FileInputStream(fileArr[j].getPath())); | 112 | System.err.println("\"" + args[i]+ "\" is an invalid file or directory location"); |
60 | isFirstFile = false; | 113 | System.exit(1); |
61 | } | ||
62 | else | ||
63 | parser.ReInit(new FileInputStream(fileArr[j].getPath())); | ||
64 | } | 114 | } |
65 | catch (FileNotFoundException e) { | ||
66 | fileNotFoundCount++; | ||
67 | e.printStackTrace(); | ||
68 | } | ||
69 | try { | ||
70 | Node root = parser.TranslationUnit(); | ||
71 | root.accept(new ExpressionExtractorVisitor(fileArr[j].getName())); | ||
72 | System.out.println("File " + dir + "/" + fileArr[j].getName() + " parsed successfully."); | ||
73 | successCount++; | ||
74 | } | ||
75 | catch (ParseException e) { | ||
76 | System.err.println("Encountered errors during parsing file " + fileArr[j].getName() + ":" + e.getMessage()); | ||
77 | failureCount++; | ||
78 | if (DEBUG) | ||
79 | e.printStackTrace(); | ||
80 | } catch (TokenMgrError e) | ||
81 | { | ||
82 | System.err.println("Encountered errors during parsing file " + fileArr[j].getName() + ":" + e.getMessage()); | ||
83 | failureCount++; | ||
84 | if (DEBUG) | ||
85 | e.printStackTrace(); | ||
86 | } | ||
87 | } | 115 | } |
88 | } | 116 | } |
117 | if (null == dbFilePath) { | ||
118 | System.err.println("Missing database file path"); | ||
119 | System.exit(1); | ||
120 | } | ||
121 | |||
122 | /* Create the Expressions Database */ | ||
123 | ExpressionDatabaseHandler.createExpressionDatabase(dbFilePath); | ||
124 | |||
125 | for (int i = 0; i < args.length; i++) | ||
126 | parseRecursively(args[i]); | ||
89 | 127 | ||
90 | /* We're done with the Expression Database, close it */ | 128 | /* We're done with the Expression Database, close it */ |
91 | ExpressionDatabaseHandler.closeDatabase(); | 129 | ExpressionDatabaseHandler.closeDatabase(); |
92 | 130 | ||
93 | System.out.println(successCount + " parsed successfully."); | 131 | System.out.println(successCount + " parsed successfully."); |
94 | System.out.println("Failed to parse " + failureCount + " files."); | 132 | System.out.println("Failed to parse " + failureCount + " files."); |
95 | System.out.println(fileNotFoundCount + " files not found."); | ||
96 | } | 133 | } |
97 | |||
98 | } | 134 | } |