我必须在Java中对自动机实现以下操作:
如果自动机是NFA,那么这些操作会更容易。我喜欢以下链接Modelling a Finite Deterministic Automaton via this data中给出的实现,但我认为这在建模NFA时不合适,因为关键的唯一性限制。您是否会向我推荐任何针对NFA建模的解决方法?
答案 0 :(得分:2)
作为实际执行这些操作的人(构建扫描仪生成器时),我建议将自动机构建为NFA,然后使用像子集构造或Thompson算法这样的算法将其转换为DFA。这保持了将自动机组合在一起简单而优雅的逻辑,而不会牺牲最终匹配自动机的速度。
希望这有帮助!
答案 1 :(得分:0)
我建议使用DFA。虽然在纸上形成NFA可能比较容易,但是根据NFA检查有效字符串比通过计算epsilon-jumps来验证DFA更复杂。
就它们的建模而言,你应该只用几个类来编写自己的。想想DFA / NFA的组成:
- 开始状态
- 一组状态(其中一些是“接受”状态)
- 过渡集