2

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

4

4 回答 4

2

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

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

于 2012-05-14T19:14:14.707 回答
1

实现一个节点对象。这就是你的想法。“国家”可能是一个更好的名字。实现一个输入对象。这将输入抽象化(我不知道您是在为班级实现某些东西还是为超工业实力实现某些东西。)

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

您将通过创建 Inputs 的数据结构和生成的 Node 输出来初始化节点。如果不了解更多信息,真的很难说这将如何工作。

然后驱动程序代码类似于

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

在不知道您要完成的工作的情况下,很难更详细。

于 2012-05-14T19:18:48.750 回答
0

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

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

所以我得出的结论是,有 4 种实现 FSA 的方法:枚举、if-else、switch case、graph、hashMap

于 2012-05-14T20:04:54.090 回答
0

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

于 2012-05-14T19:21:23.103 回答