私の教科書はすべて、正規表現を指定してDFAを生成するために同じアルゴリズムを使用します。まず、正規表現の言語を認識するNFAを作成し、次にサブセット(別名「パワーセット」)構造を使用して、NFAを同等のDFA(オプションでDFAを最小化)。私はかつて、教授が他のアルゴリズムがあることを暗示するのを聞いたことがあります。誰もが知っていますか?おそらく、中間のNFAなしで正規表現からDFAに直接移動するものでしょうか?
私の教科書はすべて、正規表現を指定してDFAを生成するために同じアルゴリズムを使用します。まず、正規表現の言語を認識するNFAを作成し、次にサブセット(別名「パワーセット」)構造を使用して、NFAを同等のDFA(オプションでDFAを最小化)。私はかつて、教授が他のアルゴリズムがあることを暗示するのを聞いたことがあります。誰もが知っていますか?おそらく、中間のNFAなしで正規表現からDFAに直接移動するものでしょうか?
回答:
正規表現を有限オートマトンに変換するさまざまなアルゴリズムがあります。オートマトンの生成中に暗黙的にサブセット構築を行うことにより、他のオートマトンを最初に構築することなく、正規表現からDFAに直接移動できます。決定性オートマトンを直接取得する別のオプションは、導関数の方法を使用することです。
正規表現がすべての文字列を含む言語を表しているかどうかを確認することは、PSPACEの完全な問題です(参照については、この回答を参照してください)。DFAがその言語を受け入れるかどうかを確認することは多項式時間で実行できるため、正規表現からDFAに直接移動すると、どこかで爆発が発生します。
文献についての私の理解は、爆発をローカライズできる翻訳を選択できるということです。つまり、正規表現から有限オートマトンに進むにはさまざまな方法があり、線形または多項式の方法が推奨されます。通常、指数コストはオートマトンの決定に押し込まれます。
DFA を効率的に生成できる正規表現のサブファミリーを特定するために、多くの作業がありました。この作業ラインは、使用する翻訳によって異なります。つまり、正規表現からNFAへのマッピングを修正し、DFAにマッピングする正規表現を特徴付けようとします。
正規表現からのオートマトンの標準的な構造は、このような作業では好ましい構造ではありません。選択した構造は、正規表現の構造に非常に似たオートマトンを生成します。これらの構造は、正規表現の導関数の概念を使用します。
正規表現の派生物、JA Brzozowski。1964年。
正規表現と有限オートマトン構文の部分微分、 V。Antimirov。1995年。
オートマトンの状態を、その状態から受け入れられるすべての文字列の表現と考える場合、(部分)導関数を使用すると、正規表現を状態として扱うことができます。正規表現をステートではなくオートマトンとして直感的に扱う標準的な教科書の構成とは対照的です。
正規表現から決定的オートマトンまで、G。ベリーとR.セッティ、1986年。
正規表現とオートマトンおよび決定論の状態の対応は、BerryとSethiによって明示的に説明されています。BerryとSethiは、Brzozowski導関数の概念と同じシンボルの出現を区別する考えを組み合わせて、正規表現の有限への変換を提供しますオートマトン。
一義的な正規言語、A。ブリュッゲマンクラインとデリックウッド、1998年。
このホワイトペーパーは、ブリューゲマンクラインによる以前の研究に基づいており、微分を使用して多項式時間でDFAを生成できるケースを研究しています。この論文の後には多くの作業があります。効率的に操作できる正規表現(DFAに対応)がSGMLとXMLの処理に重要だったため、Webテクノロジーの観点から重要でした。
確定的な正規表現の他の特殊なケースを研究する多くの仕事がありました。これらの問題のいくつかが線形時間で解決できることを研究しているごく最近の論文は、2012年からです。
線形時間の決定論的正規表現、ブノワグロズ、セバスチャンマネス、スラヴォミールスタワーク。2012年。