comparison c/regexParser/subsetConstraction.cc @ 154:1fad21fd6028 pairPro

remove errors and warnings
author masa
date Fri, 18 Dec 2015 14:16:02 +0900
parents e2e717fbeb2f
children 6cd0141bed6c
comparison
equal deleted inserted replaced
153:e2e717fbeb2f 154:1fad21fd6028
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 5
6 static
7 CharClassPtr createCharClassWord(unsigned char *w, CharClassPtr cc1, CharClassPtr cc2) { 6 CharClassPtr createCharClassWord(unsigned char *w, CharClassPtr cc1, CharClassPtr cc2) {
8 CharClassPtr cc = NEW(CharClass); 7 CharClassPtr cc = NEW(CharClass);
9 return cc1; 8 return cc;
10 } 9 }
11 10
12 CharClassPtr charClassMerge(CharClassPtr cc,unsigned long begin, unsigned long end, BitVector nextState) { 11 CharClassPtr charClassMerge(CharClassPtr cc,unsigned long begin, unsigned long end, BitVector nextState) {
13 // 重なっているccの領域を分割する 12 // 重なっているccの領域を分割する
14 // 必要ならばnextStateを重ねあわせる 13 // 必要ならばnextStateを重ねあわせる
17 CharClassPtr cc1 = charClassMerge(cc,cc->cond.range.begin,cc->cond.range.end,nextState); 16 CharClassPtr cc1 = charClassMerge(cc,cc->cond.range.begin,cc->cond.range.end,nextState);
18 if (cc->left) { 17 if (cc->left) {
19 cc1->left = charClassMerge(cc->left,begin,end,nextState); 18 cc1->left = charClassMerge(cc->left,begin,end,nextState);
20 return cc1; 19 return cc1;
21 } else { 20 } else {
22 CharClassPtr cc2 = charClassMerge(begin,end,0,0); 21 CharClassPtr cc2 = charClassMerge(cc,begin,end,nextState);
23 cc2->nextState = nextState; 22 cc2->nextState = nextState;
24 cc1->left = cc2; 23 cc1->left = cc2;
25 return cc1; 24 return cc1;
26 } 25 }
27 } else if (end == cc->cond.range.begin ) { // 2 26 } else if (end == cc->cond.range.begin ) { // 2
32 cc->cond.range.begin = begin; 31 cc->cond.range.begin = begin;
33 } 32 }
34 return cc; 33 return cc;
35 } else if (begin > cc->cond.range.end ) { // 13 34 } else if (begin > cc->cond.range.end ) { // 13
36 if (cc->right) { 35 if (cc->right) {
37 cc->right = charClassMerge(cc->right,begin,end); 36 cc->right = charClassMerge(cc->right,begin,end,nextState);
38 } else { 37 } else {
39 cc->right = charClassMerge(begin,end,0,0); 38 cc->right = charClassMerge(cc,begin,end,nextState);
40 } 39 }
41 return cc; 40 return cc;
42 } 41 }
43 if (cc->right) { 42 if (cc->right) {
44 CharClassPtr right = cc->right; 43 CharClassPtr right = cc->right;
45 begin = cc->cond.range.begin; 44 begin = cc->cond.range.begin;
46 free(cc); 45 free(cc);
47 return charClassMerge(right,begin,end); 46 return charClassMerge(right,begin,end,nextState);
48 } 47 }
49 if (begin >= cc->cond.range.begin && begin <= cc->cond.range.end) { // 12 48 if (begin >= cc->cond.range.begin && begin <= cc->cond.range.end) { // 12
50 if (end > cc->cond.range.end) cc->cond.range.end = end; // 11,8 49 if (end > cc->cond.range.end) cc->cond.range.end = end; // 11,8
51 } else if (begin < cc->cond.range.begin) { // 5 50 } else if (begin < cc->cond.range.begin) { // 5
52 cc->cond.range.begin = begin; 51 cc->cond.range.begin = begin;
56 } 55 }
57 return cc; 56 return cc;
58 } 57 }
59 58
60 TGValue generateTransition(NodePtr n,TransitionGenerator tg) { 59 TGValue generateTransition(NodePtr n,TransitionGenerator tg) {
60 TGValue tgv2;
61 if (n->tokenType == '+') { 61 if (n->tokenType == '+') {
62 TGValue tgv = generateTransition(n->left,tg); 62 TGValue tgv = generateTransition(n->left,tg);
63 if (tgv.asterisk) { 63 if (tgv.asterisk) {
64 TGValue tgv1 = generateTransition(n->right,tg); 64 TGValue tgv1 = generateTransition(n->right,tg);
65 tgv.ts->nextState->bitContainer |= tgv1.ts->nextState->bitContainer; 65 tgv.ts->nextState->bitContainer |= tgv1.ts->nextState->bitContainer;
76 } else if (n->tokenType == '*') { 76 } else if (n->tokenType == '*') {
77 TGValue tgv = generateTransition(n->left,tg); 77 TGValue tgv = generateTransition(n->left,tg);
78 tgv.asterisk = true; 78 tgv.asterisk = true;
79 return tgv; 79 return tgv;
80 } else if (n->tokenType == 'c'){ 80 } else if (n->tokenType == 'c'){
81 81 return tgv2;
82 } else if (n->tokenType == 'a'){ 82 } else if (n->tokenType == 'a'){
83 TGValue tgv; 83 TGValue tgv;
84 tgv.ts = (TransitionPtr)malloc(sizeof(Transition)); 84 tgv.ts = (TransitionPtr)malloc(sizeof(Transition));
85 tgv.ts->condition = n->cc; 85 tgv.ts->condition = n->cc;
86 tgv.ts->nextState = (BitVectorPtr)malloc(sizeof(BitVector)); 86 tgv.ts->nextState = (BitVectorPtr)malloc(sizeof(BitVector));
88 tg.ts = appendTransition(tg.ts,tgv.ts); 88 tg.ts = appendTransition(tg.ts,tgv.ts);
89 return tgv; 89 return tgv;
90 } else { 90 } else {
91 // error 91 // error
92 } 92 }
93 return tgv2;
93 } 94 }
94 95
95 void printTransitionList(TransitionPtr ts) { 96 void printTransitionList(TransitionPtr ts) {
96 for (;ts;ts = ts->next) { 97 for (;ts;ts = ts->next) {
97 printf("\n"); 98 printf("\n");