状态机说明

State Machine explanation

本文关键字:说明 状态机      更新时间:2023-10-16

我们本学期在我的操作系统课上学习状态机,我正在努力。这是提供给我们的一些代码的片段。谁能向我解释它在做什么或如何实现开关?我看完这本书没有任何运气,我的老师本周不在。这不是一项作业,而是一项未评分的练习,以帮助我们了解如何实施状态。请帮帮我!

/* 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 并且根据输入,您可以移动下一个状态(向上/向下/水平)。

在您的示例中,它将等同于

读取输入检查当前位置移动空格案例向上 执行一些操作案例下降 执行一些操作

希望这个类比对你有帮助