# HG changeset patch # User Masataka Kohagura # Date 1451195860 -32400 # Node ID b7b8f0c03fe3c49964491cde49c59052c1e31f9a # Parent e6e862e92fdce05dfa7858a5157fbf5bc40e83a1 add test/ccMerge.cc diff -r e6e862e92fdc -r b7b8f0c03fe3 regexParser/Makefile --- a/regexParser/Makefile Sun Dec 27 13:21:18 2015 +0900 +++ b/regexParser/Makefile Sun Dec 27 14:57:40 2015 +0900 @@ -1,4 +1,5 @@ TARGET= regexParser +MERGE = ccMerge CFLAGS= -Wall -O0 -g CC= clang++ @@ -18,13 +19,16 @@ test/searchBit: test/searchBit.cc $(CC) -I. $< bitVector.cc -o $@ +test/ccMerge: test/ccMerge.cc + $(CC) -I. $< subsetConstraction.cc regexParser.cc node.cc error.cc bitVector.cc -o $@ + clean: rm -f $(TARGET) $(OBJS) rm -f *~ \#* .SUFFIXES: .cc .o -test: +test1: ./$(TARGET) -regex 'a' ./$(TARGET) -regex 'ab' ./$(TARGET) -regex 'a*b' @@ -68,25 +72,25 @@ ./$(TARGET) -regex '[d-gh-ja-e]' merge_test: - ./$(MERGE) -regex '[f-i]' -merge '[d-e]' - ./$(MERGE) -regex '[f-i]' -merge '[d-f]' - ./$(MERGE) -regex '[f-i]' -merge '[d-g]' - ./$(MERGE) -regex '[f-i]' -merge '[d-i]' - ./$(MERGE) -regex '[f-i]' -merge '[d-k]' - ./$(MERGE) -regex '[f-i]' -merge '[f-g]' - ./$(MERGE) -regex '[f-i]' -merge '[f-i]' - ./$(MERGE) -regex '[f-i]' -merge '[f-k]' - ./$(MERGE) -regex '[f-i]' -merge '[g-h]' - ./$(MERGE) -regex '[f-i]' -merge '[g-i]' - ./$(MERGE) -regex '[f-i]' -merge '[g-k]' - ./$(MERGE) -regex '[f-i]' -merge '[i-k]' - ./$(MERGE) -regex '[f-i]' -merge '[j-k]' - ./$(MERGE) -regex '[c-ef-i]' -merge '[d-e]' - ./$(MERGE) -regex '[c-ef-i]' -merge '[d-f]' - ./$(MERGE) -regex '[c-ef-i]' -merge '[d-g]' - ./$(MERGE) -regex '[c-ef-i]' -merge '[d-i]' - ./$(MERGE) -regex '[c-ef-ij-m]' -merge '[d-k]' - ./$(MERGE) -regex '[f-ij-m]' -merge '[f-k]' - ./$(MERGE) -regex '[f-ij-m]' -merge '[g-k]' - ./$(MERGE) -regex '[f-ij-m]' -merge '[i-k]' - ./$(MERGE) -regex '[f-ij-m]' -merge '[j-k]' + ./test/$(MERGE) -regex '[f-i]' -merge '[d-e]' + ./test/$(MERGE) -regex '[f-i]' -merge '[d-f]' + ./test/$(MERGE) -regex '[f-i]' -merge '[d-g]' + ./test/$(MERGE) -regex '[f-i]' -merge '[d-i]' + ./test/$(MERGE) -regex '[f-i]' -merge '[d-k]' + ./test/$(MERGE) -regex '[f-i]' -merge '[f-g]' + ./test/$(MERGE) -regex '[f-i]' -merge '[f-i]' + ./test/$(MERGE) -regex '[f-i]' -merge '[f-k]' + ./test/$(MERGE) -regex '[f-i]' -merge '[g-h]' + ./test/$(MERGE) -regex '[f-i]' -merge '[g-i]' + ./test/$(MERGE) -regex '[f-i]' -merge '[g-k]' + ./test/$(MERGE) -regex '[f-i]' -merge '[i-k]' + ./test/$(MERGE) -regex '[f-i]' -merge '[j-k]' + ./test/$(MERGE) -regex '[c-ef-i]' -merge '[d-e]' + ./test/$(MERGE) -regex '[c-ef-i]' -merge '[d-f]' + ./test/$(MERGE) -regex '[c-ef-i]' -merge '[d-g]' + ./test/$(MERGE) -regex '[c-ef-i]' -merge '[d-i]' + ./test/$(MERGE) -regex '[c-ef-ij-m]' -merge '[d-k]' + ./test/$(MERGE) -regex '[f-ij-m]' -merge '[f-k]' + ./test/$(MERGE) -regex '[f-ij-m]' -merge '[g-k]' + ./test/$(MERGE) -regex '[f-ij-m]' -merge '[i-k]' + ./test/$(MERGE) -regex '[f-ij-m]' -merge '[j-k]' diff -r e6e862e92fdc -r b7b8f0c03fe3 regexParser/node.cc --- a/regexParser/node.cc Sun Dec 27 13:21:18 2015 +0900 +++ b/regexParser/node.cc Sun Dec 27 14:57:40 2015 +0900 @@ -4,7 +4,7 @@ void printCharacterClass(CharClassPtr cc, long nodeNumber,int d) { if (!cc) return; - if (cc->type == 'a') { + if (cc->type == 'a' || cc->type == 'r') { if (cc->left) { printCharacterClass(cc->left,nodeNumber,d+1); } diff -r e6e862e92fdc -r b7b8f0c03fe3 regexParser/test/ccMerge.cc --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/regexParser/test/ccMerge.cc Sun Dec 27 14:57:40 2015 +0900 @@ -0,0 +1,43 @@ +#include +#include +#include +#include "regexParser.h" +#include "node.h" +#include "subsetConstraction.h" + +int main(int argc, char **argv) +{ + RegexInfo ri; + unsigned char* merge = NULL; + 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],"-merge") == 0) { + merge = (unsigned char*)argv[i+1]; i++; + } + } + printf("regex : %s\n",ri.ptr); + printf("merge : %s\n",merge); + unsigned char begin, end; + if (merge[0] == '[') merge++; + begin = *merge; + end = *merge; + for (; *merge && *merge != ']'; merge++) { + if (*merge == '-') { + end = *(merge + 1); + merge++; + continue; + } + if (merge[0] == 0 || merge[0] == ']') break; + begin = *merge; + end = *merge; + } + NodePtr n = regex(&ri); + TransitionGeneratorPtr tg = generateTransitionList(n); + printTree(n); + BitVector nextState; + nextState.bitContainer = 8; + CharClassPtr cc = charClassMerge(n->cc,begin,end,nextState); + printf("type : %c range : [%c-%c] NextState : %lu\n",cc->type,(unsigned char)cc->cond.range.begin,(unsigned char)cc->cond.range.end, cc->nextState.bitContainer); + return 0; +}