状态机说明
State Machine explanation
我们本学期在我的操作系统课上学习状态机,我正在努力。这是提供给我们的一些代码的片段。谁能向我解释它在做什么或如何实现开关?我看完这本书没有任何运气,我的老师本周不在。这不是一项作业,而是一项未评分的练习,以帮助我们了解如何实施状态。请帮帮我!
/* Implements a state machine that parses the command line arguments, searching for switches and switch parameters.*/
int switches::getswitch()
{
while (true) // loop until a switch is identified and returned
{
int c = next(); // get next character to parse
switch (state) // process the current state
{
case START: //whats going on here?
{
sign = 0;
if (c == END_S && index >= args.size())
return END_S;
switch (c)
{
case '/':
state = S_SWITCH;
break;
default:
next_arg();
state = START;
break;
}
break;
}
// Add states here, what are the states that need to be implemented and how are they implemented?
}
}
}
状态机只是解决软件或计算机硬件问题的一种方式。您将设计分解为一系列有意义的步骤(称为状态),然后根据某些条件从一个状态过渡到另一个状态。有关一个简单的示例,请参阅维基百科关于状态机的文章。
在这种情况下,使用 switch
语句(一种常用方法)检查当前状态。每个案例的代码执行它需要为该状态执行的任何特定任务,然后设置下一个状态。如果您对switch
语句的作用感到困惑,请参阅本指南。
这
基本上是一个轮询循环(谷歌的意思)。你有"c",它是当前输入,由"next()"收集。
在每个循环中,您只有 2 条信息:
-状态(您的当前状态)-c (您当前的输入)
您必须使用状态图跟踪所有相关案例。你必须切换"状态",在每种情况下,你都必须正确处理"c"(当然,如果必须更新状态),你必须更新状态)。(可选)根据当前输入和状态执行其他操作(例如"next_arg()"调用)。
如何实现新状态? 只需在 switch 语句中添加更多情况,当然首先你需要一个好的状态图作为参考。
蛇
和梯子游戏将是最简单的状态图示例。 如果您处于某种状态并且输入是 X 并且根据输入,您可以移动下一个状态(向上/向下/水平)。
在您的示例中,它将等同于
读取输入检查当前位置移动空格案例向上 执行一些操作案例下降 执行一些操作
希望这个类比对你有帮助
相关文章:
- 如何在使用 Boost MSM 编写的状态机中直接访问任何状态
- 启动状态机无法在启动时处理内部转换
- 实现C++状态机.如何解决Wpmf对流警告
- 无法使用模板参数编译提升元状态机
- Boost状态机语言-"操作"中的"发布"事件
- 将C++数据模型与Qt SCXML状态机一起使用
- 如何在 boost::msm 中实现可以访问状态机 (SM) 的后端/前端的"BaseState"
- 分层状态机涉及哪些原则,以及如何实现基本模型?
- 如何在状态内创建状态机?
- 状态机与开关情况
- C++状态机,继承了具有语法不正确的成员值的类
- c++有限状态机
- CXX 库,用于具有运行时操作的有限状态机/自动机
- QTSCXML状态机中的事件处理
- 如何动态创建状态机
- 状态机表示
- 将Java状态机示例转换为C++,陷入最后一道障碍
- QT状态机:如何在初始状态下设置防护措施
- 在Boost Meta状态机的后端访问前端
- 状态机说明