aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSafey A.Halim <safey.allah@gmail.com>2010-10-28 16:18:41 +0000
committerSafey A.Halim <safey.allah@gmail.com>2010-10-28 16:18:41 +0000
commit4f7e2fa38eab56d0e084e86204b88c7bbecd8cbd (patch)
tree358f32fe356d10480c0470769f63864f146a0795
parent61abda51be5dcee909dd56a4a15e5e5d94ca097f (diff)
downloadgnunet-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.java2
-rw-r--r--src/monkey/seaspider/org/gnunet/seaspider/Seaspider.java164
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 @@
1package org.gnunet.seaspider; 1package org.gnunet.seaspider;
2 2
3import java.io.File; 3import java.io.File;
4import java.io.FileFilter;
5import java.io.FileInputStream; 4import java.io.FileInputStream;
6import java.io.FileNotFoundException; 5import java.io.FileNotFoundException;
6import java.io.FilenameFilter;
7 7
8import org.gnunet.seaspider.parser.CParser; 8import org.gnunet.seaspider.parser.CParser;
9import org.gnunet.seaspider.parser.ParseException; 9import org.gnunet.seaspider.parser.ParseException;
@@ -12,87 +12,123 @@ import org.gnunet.seaspider.parser.nodes.Node;
12 12
13public class Seaspider { 13public 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}