if-elseアプローチとグラフアプローチを使用してDFAを実装できることは知っていますが、それらを実装する他の方法はありますか?実際、私は正規表現用のJavaCode Generatorを作成しています。これまで、2つの可能なアプローチ(if-elseとグラフアプローチ)を実行しましたが、より多くの可能な方法を提供したいと思います。トランジションのセットまたはマップとしていくつかのデータ構造を使用して実装できると思います。
4 に答える
JavaCCまたはAntlrのようなパーサーライブラリを使用してDFAを実装することもできます。これらのライブラリは、言語文法の解析とASTの構築に役立ちます。
DFA状態を許容可能な文法のセットとしてモデル化できる場合は、これらのライブラリを使用できます。
Nodeオブジェクトを実装します。これはあなたが思っていることです。「州」はより良い名前かもしれません。Inputオブジェクトを実装します。これは入力を抽象化します(クラス用に何かを実装しているのか、それとも超産業的な強みを実装しているのかはわかりません)。
ノードにはNode transitionTo(Input input)
、、、boolean isAcceptState()
およびboolean isErrorState()
メソッドを含めることができます。
入力と結果のノード出力のデータ構造を作成して、ノードを初期化します。詳細を知らずにこれがどのように機能するかを言うのは本当に難しいです。
次に、ドライバーコードは次のようになります
while(!currentNode.isAcceptState() && !currentNode.isErrorState()) {
currentNode = currentNode.transitionTo(inputGetter.getInput());
}
あなたが何を達成しようとしているのかを知らなければ、より詳細にするのは難しいです。
enumを使用してAutomataを実装する別の方法を次に示します。かっこいいようです。
http://java.dzone.com/articles/automaton-implementation-java
したがって、私が行った結論として、FSAを実装する方法は4つあります。列挙型、if-else、switch case、graph、hashMapです。
学校で覚えているのは、スイッチを使用する方法(ifのようなもの)と、キーを入力として値を状態として使用するマップのような構造を使用する方法の4つでした。