正規表現の実装でDFAまたはNFAが使用されているかどうかを調べるにはどうすればよいですか?

私は特定の正規表現の実装がDFAまたはNFAに基づいているかどうかという疑問に直面しています。

これを理解するための出発点は何ですか? 私は何を探しているのですか基本的なパターンや特性は何ですか?良い説明リンクや少しの比較(たとえ直接正規表現に専念していなくても)はまったく問題ありません。

4
@DeepYellow:いいえ、cstheoryは研究レベルの理論的な質問です。
追加された 著者 sdcvvc,
これを cstheory.stackexchange.com に投稿することを検討してください。
追加された 著者 Codie CodeMonkey,
あなたの頭文字は少し後退していると思います。 NFAsには複数の実行パスが存在する可能性があるため、バックトラックを必要とします。とにかく一方的な方法でしか再生できないので、バックトラックはDFAを何もしません。
追加された 著者 phs,
lambda.uta.edu/cse5317/notes/node9.html も可能性がありますあなたの興味に合った通常のNFAを評価するには、アルゴリズムが一連の状態(バックトラック)を保持する必要があります。ここでDFAエバリュエーターは常に正確に1つのオートマトン状態を保持します。
追加された 著者 phs,
はい、私はそう信じています。それはしばらくしています
追加された 著者 phs,
だから、もしあなたが正しいとすれば、それはNFA + BacktrackingかDFAでしょうか?
追加された 著者 Jan,

2 答え

それがブラックボックスの場合は、グラフを参照して病理学的なケースで時間の特性を測定します。 NFSのこの議論と正規表現のバックトラッキングを参照してください。 (NFSグラフは秒ではなくマイクロ秒であることに注意してください)。

また、純粋なNFAの場合、バックトラッキングを必要とするいくつかの「正規表現」パーサーが見つかる非正規の機能はありません。

あるいは、RxParserクラスのドキュメントを見てください。ドキュメンテーションはWeb上で利用できないように見え、ブラウズするにはスクイークランタイムが必要です。

3
追加された

私はアルゴリズムではなく(正規の意味で) "正規表現の実装"を意味すると思います。

あるアプローチで問題を引き起こすことが知られている既知の式でテストできます。また、どちらかで実装するのが容易な機能を探している(これは信頼できる方法ではない - 正規表現エンジンの開発者は、以前は難しいものを実装する新しい方法を見つける)。

通常、答えはドキュメントを読んだり、既知のリファレンス( "正規表現をマスターする" a>多くの一般的なケースを文書化する)。最後に、なぜ著者に尋ねないのですか?

私はこの回答を受け入れるでしょう、なぜなら、著者に尋ねる明白な提案のためです。私はそれについても考えていなかった:)ピート・カークハムの答えは非常に貴重でもある。
追加された 著者 Jan,