我有一個場景,我設計了NFA並使用JFLAP將其轉換爲DFA。如何將NFA/DFA轉換爲java?
我需要知道,如何在Java中進行編碼?
基本上如何在Java中實現這些狀態轉換。我已經看到了一些使用switch和if語句執行此操作的示例,但我無法看到與DFA/NFA設計有關的任何關係,以及如何使用它在Java中實現。
我有一個場景,我設計了NFA並使用JFLAP將其轉換爲DFA。如何將NFA/DFA轉換爲java?
我需要知道,如何在Java中進行編碼?
基本上如何在Java中實現這些狀態轉換。我已經看到了一些使用switch和if語句執行此操作的示例,但我無法看到與DFA/NFA設計有關的任何關係,以及如何使用它在Java中實現。
的){...}
public class State{
private Map<Character,State> transitions=new HashMap<Character,State>();
public void addTransition(char ch,State st){
transitions.put(ch,st);
}
public State next(char ch){
return transitions.get(ch);
}
private boolean fin=false;
public boolean isFinal(){return fin;}
public boolean setFinal(boolean f){fin=f;}
}
,然後循環將是
State currState=startState;
while(currState!=null && input.hasNextChar()){//you can also end directly when final state is reached
char next = input.nextChar();//get next character
currState = currState.next(next);
}
if(currState!=null && currState.isFinal()){
// reached final state
}else{
// to bad didn't match
}
我有個問題可以將這種DFA模型化爲一種有向圖嗎?節點之間的鏈接包含有關字符的信息,這些信息會產生狀態轉換,就像文本上的DFAS表示一樣,如何實現這樣的想法? –
@ M.K確定每個節點都是一個狀態對象,每個鏈接都是'transitions'映射中的一個條目 –
我看到了,會試試看謝謝。 –
這個Java軟件包包含DFA/NFA(有限狀態自動機)使用Unicode字母(UTF-16),並支持標準的正則表達式操作(串聯,聯合實施,克林星)和許多非標準的人(交集,補體等)
:我會檢查出該圖書館..謝謝。 –
雖然你應該已經實現,但有很好的實現這是很容易消化。使用Digraph來保持epsilon轉換和堆棧以跟蹤表達式。查看RS NFA.java的鏈接。
可能的重複:http://stackoverflow.com/q/1340374/161640 – Isaac
@Isaac:您的鏈接與此問題無關,此問題與「NFA to DFA」無關,而是關於「NFA/DFA to Java「 – deepmax
我認爲@Isaac:關於將NFA轉換爲DFA,順便說一句,謝謝 –