-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

ステート マシンは、ソフトウェアまたはコンピューター ハードウェアの問題にアプローチする方法にすぎません。設計を一連の意味のあるステップ (状態と呼ばれる) に分割し、特定の条件に応じて状態から状態に遷移します。簡単な例については、ステート マシンに関するウィキペディアの記事を参照してください。

この場合、現在の状態はswitchステートメントを使用してチェックされます (一般的な方法)。各ケースのコードは、その状態のために必要な特定のタスクを実行してから、次の状態を設定します。switchステートメントの機能について混乱している場合は、このガイドを参照してください。

于 2013-01-28T19:56:42.110 に答える
1

これは基本的にポーリング ループです (Google で意味を調べてください)。現在の入力である「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 に答える