変数の有無にかかわらず、パターンマッチング用のプログラミング言語でのREGEXPの解釈またはコンパイルに関する優れた一般的な論文はありますか?私はDFAの構築について簡単な説明を求めているのではなく、プログラミング言語の実装で実際にそれがどのように行われるか、そして単純または難しいと考えられるものについての実際の論文を求めています。言語間の違いに影響があると思います。REGEXPの実装方法に関する正式な論文も役に立ちます:-)
変数の有無にかかわらず、パターンマッチング用のプログラミング言語でのREGEXPの解釈またはコンパイルに関する優れた一般的な論文はありますか?私はDFAの構築について簡単な説明を求めているのではなく、プログラミング言語の実装で実際にそれがどのように行われるか、そして単純または難しいと考えられるものについての実際の論文を求めています。言語間の違いに影響があると思います。REGEXPの実装方法に関する正式な論文も役に立ちます:-)
回答:
解釈された正規表現マッチャーのほとんどは、Thompsonの構築アルゴリズムから始まり、正規表現を非決定的有限オートマトンに変換します。これらを最初に説明した記事は次のとおりです。ケントンプソン、「プログラミングテクニック:正規表現検索アルゴリズム」、ACMの通信、11(6):419-422、1968年6月。しかし、この論文は少し読みにくいです。マシンコードにコンパイルしていました。
正規表現の実装に関する私のお気に入りのチュートリアルは、RE2正規表現ライブラリの作者であるRuss Coxによる一連のブログ投稿です。彼は多くの歴史的な議論をします。彼は、NFAをシミュレートする最も効率的なアプローチは、実際に到達するDFA状態のみをキャッシュして、オンザフライでDFAに変換することであると主張しています。(たとえば、Perlでの正規表現の実装とは対照的に、バックトラックを使用します。)バックトラッキングを使用する必要がある場合があります(たとえば、バックリファレンス付きの拡張正規表現を取得する場合)が、Coxは、必要な場合にのみバックトラックを使用します。
あなたが見るかもしれない他の場所は、ヘンリー・スペンサーの正規表現ライブラリです。そのウェブサイトによると、これは本で説明されていました:Dale Schumacher(ed)、Software Solutions In C、Academic Press、1994。