Tue Feb 2 11:21:14 JST 2016 あとは word の処理だけだ charClassMergeをなおさないといけない merge で文字列のlistにする 長いものは分割 部分文字列は分解する? Cerirum 側で、最初のmatchが表示されてない Tue Feb 2 09:55:40 JST 2016 % ./regexParser -subst -regex '(a|b)*a(a|b)(a|b)' ---Print Node---- a(1)->(1) | b(1)->(1) * + a(4)->(4) + a(4)->(8) | b(4)->(8) + a(8)->(2) | b(8)->(2) ----------------- state : 1 node : + 1 -> 1 [a-a] (5) [b-b] (1) state : 2* node : e 2 -> 1 state : 4 node : | 4 -> 1 [a-a] (8) [b-b] (8) state : 8 node : | 8 -> 1 [a-a] (2) [b-b] (2) state : 5 [a-a] (1) [b-b] (9) state : 9 [a-a] (1) <---- 間違い 2 とmergeしているはずだが... [b-b] (3) state : 3* [a-a] (5) [b-b] (1) やはり charClassMerge のbugだった。 createCharClassRangeで、同じものだったら新しく作らないってのがあると良い charClassMerg が同じものを返す場合があるってことね 同じレンジで同じ状態のものだけなので、それほどあるとは思えないが。 Mon Feb 1 01:51:10 JST 2016 kono 非決定性がある時の maxmum match がよろしくない これ以上拡張できないという終了条件の実現は? ./regexParser -ts -subset -regex '(a|b)*a' -file ahoaho.txt で、bの後にaが来なくなると、bの手前までをacceptする subset construction はいじらない方針で。 state : 1 node : + 1 -> 1 [a-a] (3) [b-b] (1) state : 2* node : e 2 -> 1 state : 3* [a-a] (3) [b-b] (1) * はaccept state。 [a-a] (3) で stateMatch で良いが、maxmum だと match している間は stateMatch はしない。 現状は、*の付いているstateで、条件にmatchしない時に stateMatch してる。 これだと state 3 で b で satete 1 に行ってしまい、b 以降に a がない時に失敗する。b に行く前の state 3 で stateMatchするべき。 matchする可能性がなくなったところで、前の部分でmatchさせる必要がある。 * match してなければ、match top をupdate * match している間は直前matchをupdate * match fail したところで、直前のmatch があれば、それを返す という感じか? minimum match は * match してなければ、match top をupdate * match したところで、直前のmatch があれば、それを返す か? ソース生成を CbC に対応させる。(でないと動かないらしい) Sun Jan 31 20:37:49 JST 2016 masa 並列処理時のバグ Ok (mili|have) のsubset construction のミス Ok tSearch の segv Ok '(main|int) ' .. Ok '(main|int)\(' .. Ok とかが動かない。 start state に accept flag が立っていると''にmatchしてしまう。それは別に生成する。 Sat Jan 2 15:29:16 JST 2016 kono stateよりもstate transitionの方が大きいので、subset contructionで CharClassWalkするのは良くない。 mergeTransition した時に、state listに新しいものを接続してやれば、CharClassWalkの必要はない。 その時に、stateArray には入れないでおく。sateArrayは処理済みなので。 EOF stateには cc がないので特別扱いする必要がある。 Tue Dec 29 17:55:17 JST 2015 kono Todo は上に付け加えていく。 abc*d + / \ + d / \ + * / \ | a b c Parserを書き換えて、 abc*d + / \ a + / \ b + / \ * d | c とすることもできる。たぶん、こっちの方が良い。でも、 ((ab)(c*))d と書いても良いはずで、しかも、これは abc*d とおなじになるので解決になってない。 sub treeは、最初の状態を返す必要がある。そうでないと、 (ab*|bc*) とかがうまく動かない。 最後が*で終わっている時には、次の式と重ねる必要がある。なので、 最後の*があれば、それを持ち歩く 方式が良いと思います。 stateAllocateをgenerateTransitionは1 passにすると stateArrayの大きさを徐々に増やす必要がある。 少なくともループは一つにした方が間違いが少ないだろう。 2015年 12月27日 日曜日 19時31分03秒 JST 例題 特定の IP のアクセス数をカウントする concordance regex をつかった条件付き concordance regex をつかった条件付き wordcount これを行う perl スクリプトと比較 2015年 12月26日 土曜日 18時07分00秒 JST TODO CharClassWalker の routine test を作成する TODO CharClassMerge の routine test を作成する TODO searchBit の routine test を作成する TODO subsetConstraction の routine test を作成する