java - 如何将 NFA/DFA 转换为 java?

标签 java finite-automata automata state-machine

我有一个场景,我设计了 NFA 并使用 JFLAP 将其转换为 DFA。

我需要知道如何用 Java 编写它?

基本上如何在 Java 中实现这些状态转换。我见过一些使用 switch 和 if 语句执行此操作的示例,但我看不到与 DFA/NFA 设计以及如何使用它在 Java 中实现的任何关系。

最佳答案

如果你想使用更面向对象的设计而不是 while(true)switch(state){...}

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
}

关于java - 如何将 NFA/DFA 转换为 java?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7768759/

相关文章:

java - 在 Java 中使用 ArrayList 的二维动态数组

java - grails 嵌套 bean 错误

java - inputStream 和 utf 8 有时显示 "?"个字符

binary - 用于二进制数加法和比较的图灵机

Python 有限自动机库

c++ - 为什么要实现有限状态机 : run-time error,?

java - 如何将文本文件转换为二维字符数组?

regex - 正则表达式 0*1*1+11*0*1 DFA

finite-automata - 非线性、明确和非确定性 CFL 的示例?

wpf - WPF 上的元胞自动机