Mercurial > hg > Applications > Grep
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; +}