正規表現→NFA:式から機械が生える

正規表現を入れるとトンプソン構成で NFA(非決定性有限オートマトン)が組み上がり、文字列を流すと複数の経路が同時に光って「バックトラックの正体」が見えます。 a(b|c)*

状態 いま活性(同時並行) 受理状態 細い灰矢印 = ε(空)遷移 / 太い矢印 = 文字の遷移
状態数 / 遷移数
読んだ位置
同時に活性な状態
判定(受理 / 拒否)
トンプソン構成の NFA(左の開始状態 ▸ から右の二重丸 ◎ 受理状態へ)
正規表現は「文字列のパターン」を表す式です。これを機械に変換する古典的な手順がトンプソン構成。 各パーツに小さな部品を割り当て、つなげていくだけで NFA(非決定性有限オートマトン)が「生えて」きます。
部品はたった4種類 ── 文字(1本の遷移)/連結 AB(直列につなぐ)/選択 A|B(分岐して合流)/繰り返し A*(戻り道のついたループ)。 つなぎ目には何も読まずに進める ε遷移(空遷移)が入ります。
文字列を流すと、NFA は「あり得る場所すべて」に同時にいるのが特徴。複数の光が同時に進み、行き止まりは消えていく ── これが、決定性のエンジンが内部でバックトラックとして行う試行錯誤の正体です。

いま何が起きている?

ここがポイント