comparison c/regexParser/subsetConstraction.cc @ 144:d8a4922eceae pairPro

remove some errors (not working)
author Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
date Mon, 14 Dec 2015 17:14:33 +0900
parents 32977f5a2ed0
children 1c74ac7d56ec
comparison
equal deleted inserted replaced
143:32977f5a2ed0 144:d8a4922eceae
1 #include <stdio.h> 1 #include <stdio.h>
2 #include <stdlib.h> 2 #include <stdlib.h>
3 #include <ctype.h> 3 #include <ctype.h>
4 #include "subsetConstraction.h" 4 #include "subsetConstraction.h"
5
6 static
7 CharClassPtr createCharClassWord(unsigned char *w, CharClassPtr cc1, CharClassPtr cc2) {
8 return cc1;
9 }
5 10
6 CharClassPtr charClassMerge(CharClassPtr src, CharClassPtr add) { 11 CharClassPtr charClassMerge(CharClassPtr src, CharClassPtr add) {
7 // 重なっているccの領域を分割する 12 // 重なっているccの領域を分割する
8 // 必要ならばnextStateを重ねあわせる 13 // 必要ならばnextStateを重ねあわせる
9 // 変更があった場合は新しくリストを作って返す 14 // 変更があった場合は新しくリストを作って返す
10 if (src->type == 'a') { 15 if (src->type == 'a') {
11 if (add->type == 'a') { 16 if (add->type == 'a') {
12 if (src->cond.w.word[0] > add->cond.w.word[0]) { 17 if (src->cond.w.word[0] > add->cond.w.word[0]) {
13 // add のほうが小さいので小さい順のccをつくる 18 // add のほうが小さいので小さい順のccをつくる
14 CharClassPtr left = charClassMerge(add->left.src); 19 CharClassPtr left = charClassMerge(add->left,src);
15 return createCharClassWord(add->cond->w.word, left, add->right); 20 return createCharClassWord(add->cond.w.word, left, add->right);
16 } else { 21 } else {
17 22
18 } 23 }
19 } else if (add->type == 'c') { 24 } else if (add->type == 'c') {
20 //
21 if (src->cond.w.word[0] < add->cond.range.begin) { 25 if (src->cond.w.word[0] < add->cond.range.begin) {
22 26
23 } else (src->cond->w.word[0] < add->end) { 27 } else if (src->cond.w.word[0] < add->cond.range.end) {
28
29 }
30 }
24 } else if (src->type == 'c') { 31 } else if (src->type == 'c') {
25 32
26 } 33 }
27 } 34 }
28 35
29 void printTransition(TransitionPtr ts) { 36 void printTransition(TransitionPtr ts) {
30 for (;;) { 37
31 printf("Input Condition : %c\n",ts->condition->cond->w->word);
32 printf("Next State : "); bitPrint(ts->nextState); printf("\n");
33 if (ts->next == NULL) break;
34 ts = ts->next;
35 }
36 } 38 }
37 39
38 TGValue generateTransition(NodePtr n,TransitionGenerator tg) { 40 TGValue generateTransition(NodePtr n,TransitionGenerator tg) {
39
40 if (n->tokenType == '+') { 41 if (n->tokenType == '+') {
41 TGValue tgv = generateTransition(n->left,tg); 42 TGValue tgv = generateTransition(n->left,tg);
42 if (tgv.asterisk) { 43 if (tgv.asterisk) {
43 TGValue tgv1 = generateTransition(n->right,tg); 44 TGValue tgv1 = generateTransition(n->right,tg);
44 tgv.state |= tgv1.state; 45 tgv.ts->state->bitContainer |= tgv1.ts->state->bitContainer;
45 return tgv; 46 return tgv;
46 } 47 }
47 tgv.state = n->right->nodeNumber; 48 bitSet(tgv.ts->state,n->right->nodeNumber);
48 return tgv; 49 return tgv;
49 } else if (n->tokenType == '|') { 50 } else if (n->tokenType == '|') {
50 tgv0 = generateTransition(n->left,tg); 51
51 tgv1 = generateTransition(n->right,tg);
52 tg->state->transition = appendTransition(tgv0->ts,tgv1->ts);
53 } else if (n->tokenType == '*') { 52 } else if (n->tokenType == '*') {
54 tgv0 = generateTransition(n->left,tg); 53
55 tgv0->asterisk = true; 54 } else if (n->tokenType == 'c'){
55
56 } else if (n->tokenType == 'a'){
57
56 } else { 58 } else {
57 tgv0 = (TGValuePtr)malloc(sizeof(TGValue)); 59 // error
58 BitVectorPtr bi = createBitVector(n);
59 tgv0->ts = createTransition(n->cc,bi);
60 tgv0->asterisk = false;
61 } 60 }
62
63 return tgv0;
64 } 61 }
65 62
66 StatePtr createStateList(NodePtr n) { 63 StatePtr createStateList(NodePtr n) {
67 StatePtr s0 = NULL; 64 StatePtr s0 = NULL;
68 if (n->left != NULL) { 65 if (n->left != NULL) {
71 68
72 if (n->tokenType == 'a') { 69 if (n->tokenType == 'a') {
73 BitVectorPtr bi = createBitVector(n); 70 BitVectorPtr bi = createBitVector(n);
74 StatePtr s1 = createState(bi,0,0); 71 StatePtr s1 = createState(bi,0,0);
75 } else if (n->tokenType == '+' || n->tokenType == '|') { 72 } else if (n->tokenType == '+' || n->tokenType == '|') {
76 73
77 } 74 }
78 75
79 if (n->right != NULL) { 76 if (n->right != NULL) {
80 s0 = createStateList(n->right); 77 s0 = createStateList(n->right);
81 } 78 }
82 return s0; 79 return s0;
83 } 80 }
84 81
85 TransitionGeneratorPtr generateTransitionList(NodePtr n) { 82 TransitionGenerator generateTransitionList(NodePtr n) {
86 TransitionGeneratorPtr tg = (TransitionGeneratorPtr)malloc(sizeof(TransitionGenerator)); 83 TransitionGenerator tg;
87 int d = 0; 84 tg.state = createStateList(n);
88 tg->state = createStateList(n);
89 generateTransition(n,tg); 85 generateTransition(n,tg);
90 return tg; 86 return tg;
91 } 87 }