2011-10-14 66 views
2

我有一個場景,我設計了NFA並使用JFLAP將其轉換爲DFA。如何將NFA/DFA轉換爲java?

我需要知道,如何在Java中進行編碼?

基本上如何在Java中實現這些狀態轉換。我已經看到了一些使用switch和if語句執行此操作的示例,但我無法看到與DFA/NFA設計有關的任何關係,以及如何使用它在Java中實現。

+0

可能的重複:http://stackoverflow.com/q/1340374/161640 – Isaac

+1

@Isaac:您的鏈接與此問題無關,此問題與「NFA to DFA」無關,而是關於「NFA/DFA to Java「 – deepmax

+0

我認爲@Isaac:關於將NFA轉換爲DFA,順便說一句,謝謝 –

回答

4
如果你想使用過一段時間(真)開關(狀態更加面向對象的設計

的){...}

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 
} 
+0

我有個問題可以將這種DFA模型化爲一種有向圖嗎?節點之間的鏈接包含有關字符的信息,這些信息會產生狀態轉換,就像文本上的DFAS表示一樣,如何實現這樣的想法? –

+0

@ M.K確定每個節點都是一個狀態對象,每個鏈接都是'transitions'映射中的一個條目 –

+0

我看到了,會試試看謝謝。 –

3

dk.brics.automaton看看:

這個Java軟件包包含DFA/NFA(有限狀態自動機)使用Unicode字母(UTF-16),並支持標準的正則表達式操作(串聯,聯合實施,克林星)和許多非標準的人(交集,補體等)

+0

:我會檢查出該圖書館..謝謝。 –

0

雖然你應該已經實現,但有很好的實現這是很容易消化。使用Digraph來保持epsilon轉換和堆棧以跟蹤表達式。查看RS NFA.java的鏈接。