-1

这学期我们在操作系统课上学习状态机,我很挣扎。这是我们提供的一些代码的片段。谁能向我解释它在做什么或如何实现开关?我没有运气就读完了这本书,而且我的老师这周没有空。这不是一个作业,而是一个不计分的练习,可以帮助我们理解如何实现状态。请帮我!

/* 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?


    }
}

}

4

3 回答 3

1

状态机只是解决软件或计算机硬件问题的一种方式。您将设计分解为一系列有意义的步骤(称为状态),然后根据特定条件从一个状态转换到另一个状态。有关简单示例,请参阅有关状态机的 Wikipedia 文章。

switch在这种情况下,使用语句(常用方法)检查​​当前状态。每种情况的代码都会为该状态执行它需要执行的任何特定任务,然后设置下一个状态。如果您对switch语句的作用感到困惑,请参阅本指南

于 2013-01-28T19:56:42.110 回答
1

这基本上是一个轮询循环(谷歌是什么意思)。您有“c”,它是当前输入,由“next()”收集。

在每个循环中,您只有 2 条信息:

-state (你当前的状态) -c (你当前的输入)

您必须使用状态图追踪所有相关案例。您必须切换“状态”,并且在每种情况下都必须正确处理“c”(当然,如果必须更新状态,则必须更新)。可选地,根据当前输入和状态(例如“next_arg()”调用),还有其他事情要做。

如何实施新状态?只需在 switch 语句中添加更多案例,当然首先您需要一个好的状态图作为参考。

于 2013-01-28T20:05:08.987 回答
0

蛇和梯子游戏将是最简单的状态图示例。如果您处于某种状态并且输入是 X 并且基于输入您可以移动下一个状态(上/下/水平)。

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

读取输入 检查当前位置 移动空格 Case UP 做一些动作 Case DOWN 做一些动作

希望这个类比对你有帮助

于 2013-01-28T21:04:39.807 回答