Mercurial > hg > Applications > Grep
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; +}