Mercurial > hg > Applications > Grep
diff regexParser/subsetConstruction.cc @ 228:399380ad95b7
fix generateTransitionGenerator
author | Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp> |
---|---|
date | Fri, 15 Jan 2016 19:48:53 +0900 |
parents | 8be58af605da |
children | 5d66672e5029 |
line wrap: on
line diff
--- a/regexParser/subsetConstruction.cc Fri Jan 15 19:11:35 2016 +0900 +++ b/regexParser/subsetConstruction.cc Fri Jan 15 19:48:53 2016 +0900 @@ -212,7 +212,7 @@ /** pass 1 : 正規表現に必要な状態を探して、それぞれに番号を割り振る 前が * でない + は新しく状態を作る - * があったら、次の状態はその時の先頭の状態になる + * があったら、次の状態はその時の先頭の状態か次の状態が終了状態ならば終了状態との組み合わせになる 常に先頭の状態を返す 最後が*ならば、それを持ち歩く pass 2: @@ -250,9 +250,14 @@ return tgv2; } else if (n->tokenType == '*') { TGValue tgvAstah = tgv; - tgvAstah.endState = tgvAstah.startState; + if (tgvAstah.endState->bitState.bitContainer & 2) { + tgvAstah.endState = tgvAstah.startState; + tgvAstah.endState->bitState = bitSet(tgvAstah.endState->bitState,1); + } else { + tgvAstah.endState = tgvAstah.startState; + } tgvAstah = generateTransition(n->left,tgvAstah,pass); - tgvAstah.asterisk = tgvAstah.startState; + tgvAstah.asterisk = tgvAstah.endState; return tgvAstah; } else if (n->tokenType == 'c' || n->tokenType == 'a'){ TGValue tgv1 = tgv;