Computer science 状态机是否有一个特殊的名称;“产生输入”;对自己?

Computer science 状态机是否有一个特殊的名称;“产生输入”;对自己?,computer-science,state-machine,Computer Science,State Machine,当被困在一些c**p SM代码中时,我想知道是否有一个状态机的名称,它执行导致进一步输入的操作? 例如,转换操作启动--(通电)-->已初始化 可能导致生成Play,然后状态机将获取Play作为输入,并执行转换初始化--(Play)-->Playing。 所以我需要这种机器的名字,这样我就可以把它变成我认为正常的SM(AK-SM,根据输入进行转换,OFC在过渡上的动作也可以,只要它们不影响输入)。 这太抽象了:我有一个“SM”来发送和接收MSG,问题是发送部分会导致回复被作为输入处理。这使得很难

当被困在一些c**p SM代码中时,我想知道是否有一个状态机的名称,它执行导致进一步输入的操作? 例如,转换操作<代码>启动--(通电)-->已初始化 可能导致生成
Play
,然后状态机将获取Play作为输入,并执行转换
初始化--(Play)-->Playing
。 所以我需要这种机器的名字,这样我就可以把它变成我认为正常的SM(AK-SM,根据输入进行转换,OFC在过渡上的动作也可以,只要它们不影响输入)。
这太抽象了:我有一个“SM”来发送和接收MSG,问题是发送部分会导致回复被作为输入处理。这使得很难对机器的行为进行推理,这反过来又使得修改代码变得困难

如果您担心状态机递归地调用自身,那么这样做如何:

按照我在评论中链接到的文章中的建议实现状态机,您将有一个摩尔风格的输出函数、一个米利风格的输出函数、一个转换函数和一个下一个状态确定函数

然后,您可以将其与a或a中所述的排队技术结合起来,将传入的输入排队到机器,然后让机器转换函数循环并阻止在此队列中等待输入。机器的所有输入都应该排队进入队列,而不是直接调用转换函数;这样,任何导致新输入发生的输出都将对输入排队,而不是执行递归转换调用

您也可以尝试将您的机器分为传输机器和接收机器,然后采用一种
u
结构:

   input        output
     |             ^
     v             |
+---------+   +---------+
|   rx    |   |   tx    |
| machine |-->| machine |
+---------+   +---------+
这将有助于将逻辑分离一点。这在过去对我很有效

至于这个场景的名称?我不知道。他们的名字是:

递归状态机(RSM)


更多信息请参见

这可能有助于在代码中实现:顺便说一句,如果您想将递归返回到机器中,您将希望在发出输出之前分配循环中的状态@paul tnx我知道Me/Mo diff,但我仍然会检查它