diff regexParser/CeriumGrep.cc @ 266:e51cac73e42a

CeriumGrep start
author masa
date Thu, 28 Jan 2016 21:14:34 +0900
parents regexParser/main.cc@157f6886ba55
children 5d4afe6f6d00
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/regexParser/CeriumGrep.cc	Thu Jan 28 21:14:34 2016 +0900
@@ -0,0 +1,78 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+#include "CeriumGrep.h"
+#include "subsetConstruction.h"
+#include "node.h"
+#include "grepWalk.h"
+#include "fileread.h"
+#include "threadedSearch.h"
+
+Search grep(int argc,char **argv,bool parallel)
+{
+    bool generate = true;
+    bool subset = false;
+    bool generateSequentialSearch = false;
+    bool ts = false;
+    char *filename;
+    Search s;
+    s.filename = "";
+    s.tg = NULL;
+
+    RegexInfo ri;
+    ri.stateNumber = 1;
+    for (int i = 1; i < argc; i++) {
+        if (strcmp(argv[i],"-regex") == 0) {
+            ri.ptr = (unsigned char*)argv[i+1]; i++;
+        } else if (strcmp(argv[i],"-noGeneration") == 0) {
+            generate = false;
+        } else if (strcmp(argv[i],"-subset") == 0) {
+            subset = true;
+        } else if (strcmp(argv[i],"-seq") == 0) {
+            generateSequentialSearch = true;
+        } else if (strcmp(argv[i],"-file") == 0) {
+            s.filename = filename = argv[i+1]; i++;
+        } else if (strcmp(argv[i],"-ts") == 0) {
+            ts = true;
+        }
+    }
+    if (!ri.ptr) return s;
+
+    printf("regex : %s\n",ri.ptr);
+    NodePtr n = regex(&ri);   // parse only
+    printTree(n);
+
+    TGValue tgv;
+    if (generate && !subset)  {  // NFA generation
+        tgv = generateTransitionList(n);
+        printTree(n);
+        printState(tgv.tg);
+        if (generateSequentialSearch) {
+            exportState(tgv.tg);
+        }
+    } else if (subset)  {
+        tgv = generateTransitionList(n);
+        subsetConstruction(tgv.tg);   // Determinization
+        printState(tgv.tg);
+        if (generateSequentialSearch) {
+            exportState(tgv.tg);
+        }
+    }
+
+    if (filename != NULL && !parallel) {
+        int fd = 0;
+        st_mmap_t st_mmap = createSt_mmap(filename,fd);
+        Buffer buff = createBuffer(st_mmap);
+        if (ts) threadedSearch(tgv.tg,buff);
+        else grepWalk(tgv.tg,buff);
+        close(fd);
+    }
+
+    if (parallel) {
+        createAllPossibleState(tgv.tg);
+    }
+
+    s.tg = tgv.tg;
+    return s;
+}