diff c/regexParser/subsetConstraction.cc @ 141:71f36a59cf6a pairPro

add appendState
author Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
date Fri, 11 Dec 2015 13:12:42 +0900
parents 6c258910cacb
children de0f332d560c
line wrap: on
line diff
--- a/c/regexParser/subsetConstraction.cc	Wed Dec 09 19:57:22 2015 +0900
+++ b/c/regexParser/subsetConstraction.cc	Fri Dec 11 13:12:42 2015 +0900
@@ -3,21 +3,62 @@
 #include <ctype.h>
 #include "subsetConstraction.h"
 
+void printTransition(TransitionPtr ts) {
+    for (;;) {
+        printf("Input Condition : %c\n",ts->condition->cond->w->word);
+        printf("Next  State     : "); bitPrint(ts->nextState); printf("\n");
+        if (ts->next == NULL) break;
+        ts = ts->next;
+    }
+}
+
 TGValuePtr generateTransition(NodePtr n,TransitionGeneratorPtr tg) {
-    TGValuePtr t = NULL;
+    TGValuePtr tgv0 = NULL;
+    TGValuePtr tgv1 = NULL;
+
+    if (n->tokenType == '+') {
+        tgv0 = generateTransition(n->left,tg);
+        tgv1 = generateTransition(n->right,tg);
+    } else if (n->tokenType == '|') {
+        tgv0 = generateTransition(n->left,tg);
+        tgv1 = generateTransition(n->right,tg);
+        tg->state->transition = appendTransition(tgv0->ts,tgv1->ts);
+    } else if (n->tokenType == '*') {
+        tgv0 = generateTransition(n->left,tg);
+        tgv0->asterisk = true;
+    } else {
+        tgv0 = (TGValuePtr)malloc(sizeof(TGValue));
+        BitVectorPtr bi = createBitVector(n);
+        tgv0->ts = createTransition(n->cc,bi);
+        tgv0->asterisk = false;
+    }
+
+    return tgv0;
+}
+
+StatePtr createStateList(NodePtr n) {
+    StatePtr s0 = NULL;
     if (n->left != NULL) {
-        t = generateTransition(n->left, tg);
+        s0 = createStateList(n->left);
     }
+
     if (n->tokenType == 'a') {
-
-    } else if (n->tokenType == 'c') {
-        t = generateTransition(n,tg);
-    } else {
-
+        BitVectorPtr bi = createBitVector(n);
+        StatePtr s1 = createState(bi,0,0);
+    } else if (n->tokenType == '+' || n->tokenType == '|') {
+        
     }
 
     if (n->right != NULL) {
-        t = generateTransition(n->right, tg);
+        s0 = createStateList(n->right);
     }
-    return t;
+    return s0;
 }
+
+TransitionGeneratorPtr generateTransitionList(NodePtr n) {
+    TransitionGeneratorPtr tg = (TransitionGeneratorPtr)malloc(sizeof(TransitionGenerator));
+    int d = 0;
+    tg->state = createStateList(n);
+    generateTransition(n,tg);
+    return tg;
+}