DFA を表すのに最適なデータ構造は何でしょうか?
正規表現を DFA に変換し、この特定の機能を Java のライブラリとして作成することを検討しています。
主なことは、正規表現の各エンティティは、 "car" のような単一の文字列値ではなく、値のセットを運ぶということです。私の場合、各エンティティには {car, Honda, 4x4, sedan, ... } などの多くのプロパティがあります (車を検索しているわけではありませんが、これは単なる例です)。
助言がありますか?
DFA を表すのに最適なデータ構造は何でしょうか?
正規表現を DFA に変換し、この特定の機能を Java のライブラリとして作成することを検討しています。
主なことは、正規表現の各エンティティは、 "car" のような単一の文字列値ではなく、値のセットを運ぶということです。私の場合、各エンティティには {car, Honda, 4x4, sedan, ... } などの多くのプロパティがあります (車を検索しているわけではありませんが、これは単なる例です)。
助言がありますか?
Web検索では、JavaでのDFAの例がいくつか表示されます。ただし、最適な表現は、特定のアプリケーション要件によって異なります。たとえば、アプリケーションがDFAをどのように使用するか。私はあなたがあなた自身のためにこれを解決する必要があると思います。
あなたの質問を正しく理解できれば、動的な型を持つアルファベットの任意の正規言語用のマッチング/フィルタリング ライブラリが必要ですか? あなたの車の例では、すべての車(色が赤、乗客が 2 人から 6 人、各乗客が 8 人から88 歳) または (同乗者 1 名)。
偶然にも、私は自分で(ドキュメントの検証のために)そのようなものを探していましたが、最も近いものはJingでした。Java RELAX-NG ライブラリ。残念ながら、Jing のアルファベットは XML ノードで構成されているため、問題は解決しませんでした。現時点では、Jing のパターン マッチングに基づいて、これ (任意の種類のアルファベットに対する通常の言語とのマッチング) を行うライブラリを自分で作成しようとしています。これを手伝いたい場合は、私に知らせてください;)。
データのために、この回答は元の質問には役に立たないと確信していますが、誰かがグーグルからこれに出くわした場合...
DFA と NFA は状態遷移テーブルとして保存できます。次に、リンクに従ってテーブルを移動して解析を実行します。