ウォンツテック

そでやまのーと

NFA、DFAを勉強したので以下の定義を満たす最小構成(+α)の正規表現をコーディングしてみようかと思う

アルファベットA上の正規表現とは以下の以下の規則によって作られる
表現の事である
(1) ε(空記号列)は正規表現である
(2) Aの要素a (a⊆A)は正規表現である
(3) RとSが正規表現ならば
    R|S (union), RS (concat), R* (closure)
    も正規表現である。
(4) R+を簡易記法として以下のように定める
    R+ ::= RR*  

コーディングは以下のような順に行う。
※まだ勉強中なので本も再度読みながら

文法考察フェーズ
1.正規表現の文法を考える
2. 1の文法が構文解析した時にあいまい(解析木が複数通りある)で無い事を確かめるため、LL(1)文法を満たしているかを考察する

コーディングフェーズ
3. 1の文法に従って解析木(構文木)を作成する
4. 3の構文木からNFAを作成する
5. 4のNFAからDFAを作成する
6. 5のDFAの状態数を最小化する
7. DFAのパターンマッチ処理を書く

参考文献
1. Cプログラマのためのアルゴリズムとデータ構造
2. コンパイラ (オーム社出版 中田育男著)