モジュール詳細:有限オートマトン
ステートマシンについて勉強しておいてくださいね。さもないと、この爆弾の状態が「爆発済み」に遷移してしまうかもしれませんから。
このモジュールでは、シリアルナンバーに基づいて1つ以上の正規表現を選択し、それらを有限オートマトンに変換し、それらに演算を適用する。最初の5つの画面には5つの正規表現が表示され、最後の画面は送信パネルである。
用語
- 正規表現:記号 a, b, ε (イプシロン、テキストが空であることを表す)と演算子(下記参照)から構成される文字列。
- 有限オートマトン: 状態およびそれらの間の遷移から成る集合であり、正規表現と相互変換が可能である。各遷移には英字1文字が関連し、ここでは「a」または「b」のどちらかのみ出現する。これは、その遷移がどの入力に従うかを制御するために用いられる。
- 遷移グラフ: 有限オートマトンに似た構造を持つが、「a」と「b」のみではなく、遷移には任意の正規表現を関連付けることができる。ここでは、有限オートマトンを作成するプロセスにおける一歩として用いられる。
正規表現の演算と構文
R とS は任意の正規表現である。
- 括弧:
(R)例:(a),(b) - クリーネスター:
R*例:a*,(ab)* - 結合:
RS例:ab,ab*,b*a - 選択:
R|S例:a|b,a*|ab
注意点として、選択の最後の例については、オペランド(演算対象)は、a* とab となる。これは、オペランドの優先順位によるものである。同様に、結合の最後の例について、右のオペランドはb* であり、クリーネスターの二つ目の例については、オペランドは(ab) である。また、もう一点付け加えると、 * は単項演算子であり、右側にオペランドを持たない。そのためb*a は b* とa の結合として解釈される。
下記のアルゴリズムにおいて、「最も外側の演算子」とは、括弧の中に含まれていない正規表現内で最後に演算する演算子を指す。具体的には、正規表現ab|a(ab*|a)b について、最も外側の演算子は括弧の外側にある選択演算子を指す。このような演算子が複数ある場合、次ページで説明しているアルゴリズムについては、そのような演算子からいずれかを選択してよい。