diff regexParser/regexParser.cc @ 180:d97bcab546e8 pairPro

implement getNext
author Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
date Thu, 24 Dec 2015 17:56:28 +0900
parents 6cf8252f3912
children 7ae0a3070647
line wrap: on
line diff
--- a/regexParser/regexParser.cc	Wed Dec 23 19:44:48 2015 +0900
+++ b/regexParser/regexParser.cc	Thu Dec 24 17:56:28 2015 +0900
@@ -33,12 +33,8 @@
     n->cc = cc;
     n->left = left;
     n->right = right;
-    if (n->tokenType == 'a' || n->tokenType == 'c') {
-        n->nodeNumber = ri->nodeNumber;
-        ri->nodeNumber++;
-    } else {
-        n->nodeNumber = SYNTAX_NODENUMBER;
-    }
+    n->nodeNumber = ri->stateNumber;
+    ri->stateNumber++;
 
     return n;
 }
@@ -49,7 +45,6 @@
     cc->cond.w.word = ri->tokenValue;
     cc->cond.w.length = ri->ptr - ri->tokenValue;
     cc->cond.range.begin = cc->cond.range.end = *ri->tokenValue;
-    cc->nextState = ri->current->bitSet;
     return cc;
 }
 
@@ -79,15 +74,15 @@
   13.                          b--e
 
  */
-CharClassPtr insertCharClass(CharClassPtr cc, unsigned long begin, unsigned long end,BitVector nextState) {
+CharClassPtr insertCharClass(CharClassPtr cc, unsigned long begin, unsigned long end) {
     if (cc == NULL) {
-        createCharClassRange(begin,end,nextState.bitContainer,0,0);
+        createCharClassRange(begin,end,0,0);
     }
     if (end < cc->cond.range.begin ) { // 1
         if (cc->left) {
-            cc->left = insertCharClass(cc->left,begin,end,nextState);
+            cc->left = insertCharClass(cc->left,begin,end);
         } else {
-            cc->left = createCharClassRange(begin,end,nextState.bitContainer,0,0);
+            cc->left = createCharClassRange(begin,end,0,0);
         }
         return cc;
     } else if (end == cc->cond.range.begin ) { // 2
@@ -100,9 +95,9 @@
         return cc;
     } else if (begin > cc->cond.range.end ) { // 13
         if (cc->right) {
-            cc->right = insertCharClass(cc->right,begin,end,nextState);
+            cc->right = insertCharClass(cc->right,begin,end);
         } else {
-            cc->right = createCharClassRange(begin,end,nextState.bitContainer,0,0);
+            cc->right = createCharClassRange(begin,end,0,0);
         }
         return cc;
     }
@@ -110,7 +105,7 @@
         CharClassPtr right = cc->right;
         begin = cc->cond.range.begin;
         free(cc);
-        return insertCharClass(right,begin,end,nextState);
+        return insertCharClass(right,begin,end);
     }
     if (begin >= cc->cond.range.begin && begin <= cc->cond.range.end) { // 12
         if (end > cc->cond.range.end) cc->cond.range.end = end; // 11,8
@@ -154,10 +149,9 @@
     RangeListPtr r = cc->cond.range.next;
     cc->cond.range.next = 0;
     for (; r; r = r->next) {
-        cc = insertCharClass(cc, r->begin, r->end,ri->current->bitState);
+        cc = insertCharClass(cc, r->begin, r->end);
     }
 
-    n->cc = ri->current->cc;
     // TODO literal support
     // merge rangeList here
     if (*ri->ptr) ri->ptr++;
@@ -247,22 +241,12 @@
     if (ri->tokenType == '*') {
         n = createNode(ri,'*',0,n,0);
         token(ri);
-        ri->asterisk = true;
-        ri->node = n;
     }
     return n;
 }
 
 RegexInfoPtr createRegexInfo (RegexInfoPtr ri) {
     ri->stateNumber++;
-    ri->asterisk = false;
-    ri->current = NEW(State);
-    ri->current->bitState.bitContainer = 0
-    bitSet(ri.current->bitState,ri->stateNumber);
-    ri->current->next = ri->states;
-    ri->current->cc = NULL;
-    ri->current->node = NULL;
-    ri->states = ri->current;
     return ri;
 }
 
@@ -275,28 +259,17 @@
         if (ri->tokenType == '*') {
             n = createNode(ri,'*',0,n,0);
             token(ri);
-            ri->asterisk = true;
-            ri->node = n;
             return n;
         } else if (ri->tokenType == '|') {
             n = createNode(ri,'|',0,n,0);
             NodePtr n1 = regex(ri);
             n->right = n1;
-            n->node = n;
         } else if (ri->tokenType == ')') {
             return n;
         } else {
             n = createNode(ri,'+',0,n,0);
-            if (!ri->asterisk) {
-                StatePtr save = ri->current;
-                ri = createRegexInfo(ri);
-                NodePtr n1 = regexAtom(ri);
-                n->right = n1;
-                ri->current = save;
-            } else {
-                NodePtr n1 = regexAtom(ri);
-                n->right = n1;
-            }
+            NodePtr n1 = regexAtom(ri);
+            n->right = n1;
         }
     }
     return n;