2011-10-14 42 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的链接。