我有一个场景,我设计了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,顺便说一句,谢谢 –