我知道可以使用if-else方法和图表方法实现DFA,但是有没有其他方法来实现它们? 实际上我正在为正则表达式创建一个JavaCode Generator,到目前为止我已经做了两种可能的方法(if-else和graph方法),但我想提供更多可能的方法。我想也许它可以使用一些数据结构实现为Set或Map for transitions。
答案 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的另一种方法。看起来很酷。
作为我的结论,有4种实现FSA的方法:枚举,if-else,switch case,graph,hashMap