正規表現
エンジン設計
ドラゴンブックに忠実なPOSIX-NFA。
理論そのまんま。
プログラムを小さく作ろうとすれば500行程度で完成(6kB)
してしまう。
正規表現エンジンの構造
以下の4つの部分により構成される。
P、プリプロセッサ、正規表現式を有向グラフに変換する。
W、ラッパー、仮想機械に対する操作を関数の形に纏める。
V、仮想機械、入力に応じて複数の状態を変更し状況を示す。
S、状態、仮想機械から複数保持され、ε遷移によって増殖し、停止時に消去される。
実行のシナリオ
以下の4つのステップにより実行される
STEP1:正規表現式の処理
プリプロセッサが正規表現式をグラフ構造に変換し、仮想機械を生成する。
STEP2:仮想機械の初期化
仮想機械が状態を一つだけ生成し、初期状態を設定する。
STEP3:入力および照合の実行
until
仮想機械の保持する状態が0個になるかまたは入力の終了まで
仮想機械に一文字入力する
foreach
保持している状態
遷移可能であるならば遷移先の状態へ変更(S'←(文字)─S)
ε遷移が発生したならば新し
い状態を一つ追加し別の遷移先を設定する
遷移不可能であるならば状態を消去
end
文字数 := 文字数 + 1
受理可能な状態が1個以上ならば文字数を一致した長さとして保存する
end
STEP4:結果の判定
if 一致した長さ=0 then
照合しなかった
式全体が空列生成可能であるならば長さゼロで一致した
else
照合した
end