Mercurial > hg > Applications > Grep
changeset 186:3e8aae8beba9 pairPro
fix createTransitionGenerator()
author | Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp> |
---|---|
date | Thu, 24 Dec 2015 20:37:29 +0900 |
parents | d25f4f3b4c34 |
children | ef798db705e9 |
files | regexParser/regexParser.h regexParser/subsetConstraction.cc |
diffstat | 2 files changed, 18 insertions(+), 29 deletions(-) [+] |
line wrap: on
line diff
--- a/regexParser/regexParser.h Thu Dec 24 20:27:49 2015 +0900 +++ b/regexParser/regexParser.h Thu Dec 24 20:37:29 2015 +0900 @@ -17,9 +17,7 @@ StateStack stack; StatePtr state; StatePtr stateArray; - StatePtr stateArrayLast; StatePtr currentState; - StatePtr nextState; } TransitionGenerator, *TransitionGeneratorPtr; typedef struct tgValue {
--- a/regexParser/subsetConstraction.cc Thu Dec 24 20:27:49 2015 +0900 +++ b/regexParser/subsetConstraction.cc Thu Dec 24 20:37:29 2015 +0900 @@ -204,9 +204,9 @@ } /** - 作成する state を linked list -bitvector を index とした配列に BitVectorPtr を格納 -state に対応する NodePtr を + 作成する state を linked list + bitvector を index とした配列に BitVectorPtr を格納 + state に対応する NodePtr を */ TGValue createState(TGValue tg,NodePtr n) { StatePtr s = NEW(State); @@ -219,9 +219,9 @@ } /** -正規表現に必要な状態を探して、それぞれに番号を割り振る -前が * でない + は新しく状態を作る -* があったら、次の状態はその時の先頭の状態になる + 正規表現に必要な状態を探して、それぞれに番号を割り振る + 前が * でない + は新しく状態を作る + * があったら、次の状態はその時の先頭の状態になる */ TGValue stateAllocate(NodePtr n,TGValue tg) { if (n->tokenType == '+') { @@ -260,9 +260,9 @@ } /** -割り当てられた状態に沿って charclass の行き先を書き換える -書き換えた charclass を merge する -前の部分に * がない + は新しい状態をつくるので、state を切り替えて生成する + 割り当てられた状態に沿って charclass の行き先を書き換える + 書き換えた charclass を merge する + 前の部分に * がない + は新しい状態をつくるので、state を切り替えて生成する */ TGValue generateTransition(NodePtr n,TGValue tg) { if (n->tokenType == '+') { @@ -306,28 +306,18 @@ } } -TransitionGenerator createTransitionGenerator() { - TransitionGenerator tg; - tg.ts = NEW(Transition); - tg.state = NEW(State); - tg.transitionList = NEW(Transition); - // Init State : 00...00(64bit) - BitVectorPtr initStateBi = NEW(BitVector); - bitSet(initStateBi,INIT_STATE_BIT); - StatePtr initState = createState(*initStateBi); - // Last State : 10...00(64bit) - BitVectorPtr lastStateBi = NEW(BitVector); - bitSet(lastStateBi,END_STATE_BIT); - StatePtr lastState = createState(*lastStateBi); - tg.stateArray = appendState(initState,lastState); - tg.stateArrayLast = lastState; - tg.currentState = initState; - tg.nextState = NEW(State); +TransitionGeneratorPtr createTransitionGenerator() { + TransitionGeneratorPtr tg = NEW(TransitionGenerator); + tg->stateMax = 0; + tg->stack = NULL; + tg->state = NEW(State); + tg->stateArray = NULL; + tg->currentState = NULL; return tg; } TransitionGenerator generateTransitionList(NodePtr n) { - TransitionGenerator tg = createTransitionGenerator(); + TransitionGeneratorPtr tg = createTransitionGenerator(); TGValue tgv; tgv.asterisk = false; tgv.tg = tg; @@ -337,6 +327,7 @@ tgv.stateBegin = 0; tgv.stateEnd = 1; stateAllocate(n,tgv); + tgv.tg->stateMax = tg.stateNum; tgv.tg.stateArray = (StatePtr)calloc(tg.stateNum,sizeof(StatePtr)); generateTransition(n,tgv); printTransitionList(tg.ts);