我们正在学习本学期操作系统课程中的状态机,我正在努力。这是我们提供的一些代码的片段。任何人都可以向我解释它正在做什么或如何实现开关?我没有运气就阅读了这本书,本周我的老师不在。这不是一项任务,而是一项未经评论的练习,以帮助我们了解如何实施国家。请帮帮我!
/* 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?
}
}
}
答案 0 :(得分:1)
状态机只是解决软件或计算机硬件问题的一种方法。您将设计分解为一系列有意义的步骤(称为状态),然后根据特定条件从一个状态转换到另一个状态。请参阅有关simple example的状态机的维基百科文章。
在这种情况下,使用switch
语句(常用方法)检查当前状态。每个案例的代码执行它需要为该状态执行的任何特定任务,然后设置下一个状态。如果您对switch
语句的内容感到困惑,请参阅this guide。
答案 1 :(得分:1)
这基本上是一个轮询循环(google意味着什么)。你有“c”当前输入,并由“next()”收集。
在每个循环中,您只有2个信息:
-state(你当前的状态) -c(您当前的输入)
你必须用状态图跟踪所有相关案例。你必须切换“状态”,在每个案例中你必须正确处理“c”(当然,你必须更新状态,如果必须的话)。根据当前输入和状态(例如“next_arg()”调用),可选择执行其他操作。
如何实施新州?只需在switch语句中添加更多个案,当然首先需要一个好的状态图作为参考。
答案 2 :(得分:0)
在您的示例中,它将等同于
阅读输入 检查当前位置移动空间 案例 做一些动作 案件下来 做一些行动
希望这个类比可以帮助你