国机说明

时间:2013-01-28 19:44:43

标签: c++ command-line operating-system switch-statement state

我们正在学习本学期操作系统课程中的状态机,我正在努力。这是我们提供的一些代码的片段。任何人都可以向我解释它正在做什么或如何实现开关?我没有运气就阅读了这本书,本周我的老师不在。这不是一项任务,而是一项未经评论的练习,以帮助我们了解如何实施国家。请帮帮我!

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


    }
}

}

3 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:1)

这基本上是一个轮询循环(google意味着什么)。你有“c”当前输入,并由“next()”收集。

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

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

你必须用状态图跟踪所有相关案例。你必须切换“状态”,在每个案例中你必须正确处理“c”(当然,你必须更新状态,如果必须的话)。根据当前输入和状态(例如“next_arg()”调用),可选择执行其他操作。

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

答案 2 :(得分:0)

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

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

阅读输入 检查当前位置移动空间 案例      做一些动作 案件下来       做一些行动

希望这个类比可以帮助你