哪些是实施DFA的最佳方式?

时间:2012-05-14 19:08:16

标签: java finite-automata dfa automata

我知道可以使用if-else方法和图表方法实现DFA,但是有没有其他方法来实现它们? 实际上我正在为正则表达式创建一个JavaCode Generator,到目前为止我已经做了两种可能的方法(if-else和graph方法),但我想提供更多可能的方法。我想也许它可以使用一些数据结构实现为Set或Map for transitions。

4 个答案:

答案 0 :(得分:2)

您还可以使用JavaCC或Antlr类似的解析器库来实现DFA。 这些库有助于解析语言语法和构建AST。

如果您可以将DFA状态建模为一组可接受的语法,则可以使用这些库。

答案 1 :(得分:1)

实现Node对象。这就是你的想法。 '州'可能是一个更好的名字。 实现一个Input对象。这抽象了输入(我不知道你是在为类或某些超级工业强度实现某些东西。)

该节点可以有Node transitionTo(Input input)boolean isAcceptState()boolean isErrorState()方法。

您可以通过创建Inputs的数据结构和生成的Node输出来初始化节点。如果不了解更多内容,很难说这是如何运作的。

然后驱动程序代码就像

while(!currentNode.isAcceptState() && !currentNode.isErrorState()) {
    currentNode  = currentNode.transitionTo(inputGetter.getInput());
    }

在不知道你想要完成什么的情况下,更难以更加详细。

答案 2 :(得分:0)

我记得在学校里有四种使用开关的方式(非常像if),另一种使用类似地图的结构,键作为输入,值作为状态。

答案 3 :(得分:0)

这是使用枚举实现Automata的另一种方法。看起来很酷。

http://java.dzone.com/articles/automaton-implementation-java

作为我的结论,有4种实现FSA的方法:枚举,if-else,switch case,graph,hashMap