【问题标题】:Which are the best ways to implement a DFA?哪些是实施 DFA 的最佳方式?
【发布时间】:2012-05-22 07:19:34
【问题描述】:

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

【问题讨论】:

  • 有一个名为OpenFst的C++模板库

标签: java finite-automata dfa automata


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

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

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

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

    那么驱动代码是这样的

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

    如果不知道您要完成什么,就很难更详细。

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

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

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

        【讨论】:

        • 实际上我正在为正则表达式创建一个JavaCode Generator,到目前为止我已经完成了两种可能的方法(if-else 和图形方法),但我想提供更多可能的方法。我认为也许它可以使用一些数据结构作为转换的 Set 或 Map 来实现。
        猜你喜欢
        • 2017-05-17
        • 1970-01-01
        • 2017-11-19
        • 1970-01-01
        • 2017-12-18
        • 2022-11-09
        • 2012-01-29
        • 1970-01-01
        • 2011-04-18
        相关资源
        最近更新 更多