# HG changeset patch # User Masataka Kohagura # Date 1450089556 -32400 # Node ID 50217a0545e87e34c7961471ce2aa7cc1693e5e1 # Parent d8a4922eceae16974c177bb3844b3911ffb02074 fix charClass() diff -r d8a4922eceae -r 50217a0545e8 c/regexParser/main.cc --- a/c/regexParser/main.cc Mon Dec 14 17:14:33 2015 +0900 +++ b/c/regexParser/main.cc Mon Dec 14 19:39:16 2015 +0900 @@ -10,8 +10,6 @@ { RegexInfoPtr ri = (RegexInfoPtr)malloc(sizeof(RegexInfo)); ri->nodeNumber = 1; - ri->orNum = 0; - ri->asterFlag = false; for (int i = 1; i < argc; i++) { if (strcmp(argv[i],"-regex") == 0) { diff -r d8a4922eceae -r 50217a0545e8 c/regexParser/node.cc --- a/c/regexParser/node.cc Mon Dec 14 17:14:33 2015 +0900 +++ b/c/regexParser/node.cc Mon Dec 14 19:39:16 2015 +0900 @@ -4,8 +4,13 @@ static void printCharacterClass(CharClassPtr cc, long nodeNumber,int d) { if (cc->type == 'r') { printf("%*c",d*4, ' '); - for (RangeList range = cc->cond.range; range.begin != 0; range = *range.next) { + for (RangeList range = cc->cond.range; range.begin != 0;) { printf("[%c-%c] ",(unsigned char)range.begin,(unsigned char)range.end); + if (range.next != NULL) { + range = *range.next; + } else { + break; + } } printf("(%lu)\n",nodeNumber); } diff -r d8a4922eceae -r 50217a0545e8 c/regexParser/regexParser.cc --- a/c/regexParser/regexParser.cc Mon Dec 14 17:14:33 2015 +0900 +++ b/c/regexParser/regexParser.cc Mon Dec 14 19:39:16 2015 +0900 @@ -63,22 +63,23 @@ RangeListPtr rangeList = &cc->cond.range; rangeList->begin = (unsigned long)*ri->ptr; rangeList->end = (unsigned long)*ri->ptr; + rangeList->next = NULL; for (ri->ptr++; *ri->ptr && *ri->ptr != ']'; ri->ptr++) { if (*ri->ptr == '-') { - rangeList->end = (unsigned long)(ri->ptr + 1); + rangeList->end = (unsigned long)*(ri->ptr + 1); ri->ptr++; continue; } if (ri->ptr[0] == 0 || ri->ptr[0] == ']') break; if (ri->ptr[0] == rangeList->end + 1) { - rangeList->end = (unsigned long)ri->ptr; + rangeList->end = (unsigned long)*ri->ptr; continue; } rangeList->next = NEW(RangeList); rangeList = rangeList->next; - rangeList->begin = (unsigned long)ri->ptr; - rangeList->end = (unsigned long)ri->ptr; + rangeList->begin = (unsigned long)*ri->ptr; + rangeList->end = (unsigned long)*ri->ptr; rangeList->next = NULL; } // TODO literal support @@ -119,7 +120,6 @@ ri->ptr++; ri->tokenType = '|'; ri->tokenValue = NULL; - ri->orNum++; return; } else if (ri->ptr[0] == '*'){ ri->ptr++; diff -r d8a4922eceae -r 50217a0545e8 c/regexParser/regexParser.h --- a/c/regexParser/regexParser.h Mon Dec 14 17:14:33 2015 +0900 +++ b/c/regexParser/regexParser.h Mon Dec 14 19:39:16 2015 +0900 @@ -43,6 +43,4 @@ unsigned char tokenType; unsigned char *tokenValue; int nodeNumber; - int orNum; - bool asterFlag; } RegexInfo, *RegexInfoPtr;