使用HashMap实现对DFA和NFA建模

时间:2012-06-05 14:47:55

标签: java dfa nfa

我必须在Java中对自动机实现以下操作:

  • 级联
  • Kleene Star
  • 联盟
  • 交叉口

如果自动机是NFA,那么这些操作会更容易。我喜欢以下链接Modelling a Finite Deterministic Automaton via this data中给出的实现,但我认为这在建模NFA时不合适,因为关键的唯一性限制。您是否会向我推荐任何针对NFA建模的解决方法?

2 个答案:

答案 0 :(得分:2)

作为实际执行这些操作的人(构建扫描仪生成器时),我建议将自动机构建为NFA,然后使用像子集构造或Thompson算法这样的算法将其转换为DFA。这保持了将自动机组合在一起简单而优雅的逻辑,而不会牺牲最终匹配自动机的速度。

希望这有帮助!

答案 1 :(得分:0)

我建议使用DFA。虽然在纸上形成NFA可能比较容易,但是根据NFA检查有效字符串比通过计算epsilon-jumps来验证DFA更复杂。

就它们的建模而言,你应该只用几个类来编写自己的。想想DFA / NFA的组成:
- 开始状态
- 一组状态(其中一些是“接受”状态)
- 过渡集