非确定性状态机理解

时间:2019-02-22 21:48:43

标签: dsl state-machine finite-automata non-deterministic

我正在尝试为我的iOS项目构建DSL。
为此,我计划以Semantic Model的形式构建State Machine。 (术语来自Fowler关于DSL的书)。
主要思想:State Machine被编码为它们之间的statestransitions的集合,然后可以编写一些单元测试来检查{{1}上的some_action }将系统引导至some_state1

问题是我的应用程序有很多后台线程,因此在给定的时刻,状态机中可以激活多个状态。

我已经读过,这样的状态机是some_state2,浏览了Wiki页面,但这对我来说太理论化了。

这是一个示例状态机:

Nondeterministic finite automaton仅在收到s8t7时才能被激活,这意味着它应该“等待”。

enter image description here


问题:
1.状态机中是否有类似t8的东西?
2.也许这不是NFA,而是两个状态机?我是否应该完全在乎如何命名这种语义模型?
3.是否可以通过一些后台线程来实现"wait",该线程可以接受来自s8s4的通知,并且仅当它们两个都发送了通知时才被激活(这意味着该单元到达超时时测试失败,然后在模型中的某个地方提及该超时)?

1 个答案:

答案 0 :(得分:1)

看看分层状态机中的orthogonal regions,这应该可以满足您的需求。

创建一个具有两个子区域的新状态:第一个包含s1,s2,s3,s4的区域和一个新的最终状态(t8的目标);第二个区域包含s5,s6,s7和新的最终状态(t7的目标)。然后添加一个从新状态到s8的新过渡。

仅当两个区域都处于最终状态时,才遍历新的过渡。