diff c/regexParser/createBitVectorList.cc @ 98:d0d2262d4edf impl-bitvector

implement if (NodeChar == '+')
author Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
date Tue, 10 Nov 2015 18:08:53 +0900
parents b807383bcc43
children 1e5b56e8263b
line wrap: on
line diff
--- a/c/regexParser/createBitVectorList.cc	Tue Nov 10 16:18:06 2015 +0900
+++ b/c/regexParser/createBitVectorList.cc	Tue Nov 10 18:08:53 2015 +0900
@@ -11,19 +11,28 @@
 int bvlIndex;
 
 BitVectorListPtr createBitVector(NodePtr n,BitVectorListPtr bvl) {
-    bvl->next[(int)n->Value.character] = (BitVectorListPtr)malloc(sizeof(BitVectorList));
-    bvl->next[(int)n->Value.character]->bi = bitSet(n->nodeNumber);
+    BitVectorListPtr nextBvl = bvl->next[(int)n->Value.character] = (BitVectorListPtr)malloc(sizeof(BitVectorList));
+    nextBvl->bi = (BitVectorPtr)malloc(sizeof(BitVector));
+    nextBvl->bi = bitSet(n->nodeNumber);
+    nextBvl->self = bvl->next[(int)n->Value.character];
+
     puts("-----");
-    bitPrint(bvl->bi);
-    bitPrint(bvl->next[(int)n->Value.character]->bi);
+    printf("     state : "); bitPrint(bvl->bi);
+    for (int i = 0; i < 256; i++) {
+        if (bvl->next[i] != NULL) {
+            printf("input char : %c\n",i);
+        }
+    }
+    printf("next state : ");bitPrint(bvl->next[(int)n->Value.character]->bi);
     puts("-----");
     return bvl->next[(int)n->Value.character];
 }
 
 BitVectorListPtr initBitVector() {
     BitVectorListPtr bvl = (BitVectorListPtr)malloc(sizeof(BitVectorList));
-    BitVectorPtr bi = bitSet(0);
-    bvl->bi = bi;
+    bvl->self = bvl;
+    bvl->bi = (BitVectorPtr)malloc(sizeof(BitVector));
+    bvl->bi = bitSet(0);
     return bvl;
 }
 
@@ -31,17 +40,14 @@
 BitVectorListPtr descendTreeNode(NodePtr n,BitVectorListPtr bvl) {
 
     if (n->tokenType == '*') {
-        descendTreeNode(n->left,bvl);
+        bvl = descendTreeNode(n->left,bvl);
     } else if (n->tokenType == '|') {
 
     } else if (n->Value.character == '+') {
-        descendTreeNode(n->left,bvl);
-        descendTreeNode(n->right,bvl);
-    } else {
-        if (n->parent->right->tokenType == 'a') {
-            descendTreeNode(n->parent->right,bvl);
-            bvl = createBitVector(n,bvl);
-        }
+        bvl = descendTreeNode(n->left,bvl);
+        bvl = descendTreeNode(n->right,bvl);
+    } else if (n->tokenType == 'a') {
+        bvl = createBitVector(n,bvl);
     }
 
     return bvl;