機能限定版の正規表現をトップダウン構文解析して非決定性有限オートマトン(NFA)を生成し、それから部分集合構成法で決定性有限オートマトン(DFA)を生成するコードを Perl で書いてみました。 扱う正規表現は、総称文字(.)や文字クラス([][…][])が使えず、1文字そのものしか扱えず、繰り返し指定は ? と * しか使えません。括弧 (…)は Perl の (?:…) に相当し、パターンの記憶はできません。複数選択の | は使えます。 ネタ元のドラゴンブックの字句解析部の説明で使われているプログラミング言語の断片の字句を Perl 風にちょっと変更した正規表現を DFA にして字句それぞれにマッチさせるサンプルを書くと次のようになります。 (追記) このパッケージの DFA と NFA の match メソッドは m/\A…\z/ の動作をします。 #!/bin/env perl u
![dfa-0.01 正規表現から DFA へ(NFA 経由版) - Tociyuki::Diary](https://cdn-ak-scissors.b.st-hatena.com/image/square/34502657bc82a14f5166988e75167e0089cb9c18/height=288;version=1;width=512/https%3A%2F%2Fimages-fe.ssl-images-amazon.com%2Fimages%2FI%2F511AGWXO6tL._SL160_.jpg)