diff regexParser/subsetConstraction.cc @ 190:3e8e5780ad4a pairPro

change node::State to State
author Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
date Fri, 25 Dec 2015 15:30:52 +0900
parents fccf7941ecc2
children 02031fb73af8
line wrap: on
line diff
--- a/regexParser/subsetConstraction.cc	Fri Dec 25 14:42:31 2015 +0900
+++ b/regexParser/subsetConstraction.cc	Fri Dec 25 15:30:52 2015 +0900
@@ -2,6 +2,7 @@
 #include <stdlib.h>
 #include <ctype.h>
 #include "subsetConstraction.h"
+#include "node.h"
 
 CharClassPtr createCharClassWord(unsigned char *w, CharClassPtr cc1, CharClassPtr cc2) {
     CharClassPtr cc = NEW(CharClass);
@@ -186,7 +187,7 @@
     }
 }
 
-CharClassPtr mergeTransition(node::StatePtr x,CharClassPtr y) {
+CharClassPtr mergeTransition(StatePtr x,CharClassPtr y) {
     if (x->cc == NULL) {
         return y;
     }
@@ -208,8 +209,8 @@
     bitvector を index とした配列に BitVectorPtr を格納
     state に対応する NodePtr を
  */
-node::StatePtr createState(TGValue tg,NodePtr n) {
-    node::StatePtr s = NEW(node::State);
+StatePtr createState(TGValue tg,NodePtr n) {
+    StatePtr s = NEW(State);
     s->next = tg.tg->currentState;
     tg.tg->currentState = s;
     s->node = n;
@@ -273,7 +274,7 @@
             tgRight.asterisk = true;
             return tgRight;
         }
-        node::StatePtr left = tg.tgState;
+        StatePtr left = tg.tgState;
         tg.tgState = n->left->state;
         // tg.tg->stateArray[tg.tgState->bitState.bitContainer] = tg.tgState;
         TGValue tgLeft = generateTransition(n->left,tg);
@@ -304,7 +305,7 @@
     TransitionGeneratorPtr tg = NEW(TransitionGenerator);
     tg->stateMax = 0;
     tg->stack = NULL;
-    tg->state = NEW(node::State);
+    tg->state = NEW(State);
     tg->stateArray = NULL;
     tg->currentState = NULL;
     return tg;
@@ -322,7 +323,26 @@
     tgv.stateEnd = 1;
     stateAllocate(n,tgv);
     tgv.tg->stateMax = tg->stateMax;
-    tgv.tg->stateArray = (node::StatePtr)calloc(tg->stateMax,sizeof(node::StatePtr));
+    BitVector bi = createBitVector(tg->stateMax);
+    tgv.tg->stateArray = (StatePtr)calloc(bi.bitContainer*2,sizeof(StatePtr));
     generateTransition(n,tgv);
     return tg;
 }
+
+void printState(StatePtr state) {
+    printf("state : %lx\n",state->bitState.bitContainer);
+    long nodeNumber = 0;
+    if (state->node) {
+        printf("node : %c %d -> %d\n",state->node->tokenType,state->node->stateNum,state->node->nextStateNum);
+        nodeNumber = state->node->stateNum;
+    }
+    printCharacterClass(state->cc,nodeNumber,4);
+}
+
+void printState(TransitionGeneratorPtr tg) {
+    StatePtr state = tg->currentState;
+    for (;state;state = state->next) {
+        printState(state);
+        putchar('\n');
+    }
+}