changeset 212:b0ae5273925c

implement allocateCCState()
author Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
date Mon, 28 Dec 2015 16:42:02 +0900
parents bc596e357a52
children 11b6332f0a42
files regexParser/TODO regexParser/node.cc regexParser/regexParser.cc regexParser/regexParser.h regexParser/subsetConstraction.cc
diffstat 5 files changed, 33 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/regexParser/TODO	Mon Dec 28 15:43:27 2015 +0900
+++ b/regexParser/TODO	Mon Dec 28 16:42:02 2015 +0900
@@ -1,7 +1,7 @@
 2015年 12月26日 土曜日 18時07分00秒 JST
     TODO CharClassWalker の routine test を作成する
     TODO CharClassMerge の routine test を作成する
-    TODO serchBit の routine test を作成する
+    TODO searchBit の routine test を作成する
     TODO subsetConstraction の routine test を作成する
 
 2015年 12月27日 日曜日 19時31分03秒 JST
--- a/regexParser/node.cc	Mon Dec 28 15:43:27 2015 +0900
+++ b/regexParser/node.cc	Mon Dec 28 16:42:02 2015 +0900
@@ -17,7 +17,7 @@
                 break;
            }
         }
-        printf("(%ld)\n",nodeNumber);
+        printf("(%d)\n",cc->stateNum);
         if (cc->right) {
             printCharacterClass(cc->right,nodeNumber,d+1);
         }
--- a/regexParser/regexParser.cc	Mon Dec 28 15:43:27 2015 +0900
+++ b/regexParser/regexParser.cc	Mon Dec 28 16:42:02 2015 +0900
@@ -126,6 +126,8 @@
     cc->nextState.bitContainer = 0;
     cc->left = NULL;
     cc->right = NULL;
+    cc->stateNum = 0;
+    cc->state = NULL;
     RangeListPtr rangeList = &cc->cond.range;
     rangeList->begin = *ri->ptr;
     rangeList->end = *ri->ptr;
--- a/regexParser/regexParser.h	Mon Dec 28 15:43:27 2015 +0900
+++ b/regexParser/regexParser.h	Mon Dec 28 16:42:02 2015 +0900
@@ -24,11 +24,15 @@
     Word w;
 } Condition, *ConditionList;
 
+struct state;
+
 typedef struct charClass {
     unsigned char type;
     struct charClass *left;
     struct charClass *right;
     Condition cond;
+    int stateNum;
+    struct state *state;
     BitVector nextState;
 } CharClass, *CharClassPtr;
 
--- a/regexParser/subsetConstraction.cc	Mon Dec 28 15:43:27 2015 +0900
+++ b/regexParser/subsetConstraction.cc	Mon Dec 28 16:42:02 2015 +0900
@@ -195,6 +195,28 @@
     bitvector を index とした配列に BitVectorPtr を格納
     state に対応する NodePtr を
  */
+StatePtr createCCState(CharClassPtr cc,TGValue tgv) {
+    StatePtr s = NEW(State);
+    s->stateNum = cc->stateNum = ++tgv.tg->totalStateCount;
+    s->next = tgv.tg->stateList;
+    tgv.tg->stateList = s;
+    BitVector bi = createBitVector(cc->stateNum);
+    s->bitState = bi;
+    s->cc = cc;
+    return s;
+}
+
+CharClassPtr allocateCCState(CharClassPtr cc, TGValue tgv) {
+    if (cc->left != NULL) {
+        allocateCCState(cc->left,tgv);
+    }
+        cc->state = createCCState(cc,tgv);
+    if (cc->right != NULL) {
+        allocateCCState(cc->right,tgv);
+    }
+    return cc;
+}
+
 StatePtr createState(TGValue tgv,NodePtr n) {
     StatePtr s = NEW(State);
     s->stateNum = n->stateNum = ++tgv.tg->totalStateCount;
@@ -203,6 +225,9 @@
     s->node = n;
     BitVector bi = createBitVector(n->stateNum);
     s->bitState = bi;
+    if (n->cc) {
+        CharClassPtr cc = allocateCCState(n->cc,tgv);
+    }
     s->cc = n->cc;
     return s;
 }