問題タブ [fsm]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
fsm - 結合された状態、FSM
FSMの状態を組み合わせるのは「正しい」ですか?
あなたがオブジェクトを持っているとしましょう
たまたま、次のように状態を組み合わせることが理にかなっています。
しかし、FSM理論では、これは違法ですか?
それはもっと近道です:
ランニング、ウォーキング、ジャンプの3つの状態があるとします。次に、4番目の状態の発砲があります。
走って発射、歩いて発射、ジャンプして発射できる必要があります。RunningFiring、WalkingFiring、JumpingFiringの6つの状態を作成する代わりに、Firing状態を(Walking Running Jumping状態)と組み合わせたいと思います。
「第4の状態」にBOOLを使用できることは知っていますが、それはさらに間違っているように思われませんか?「側の状態...」を持っている
c++ - C ++でのゲームの汎用FSM?
C++ を使用したゲーム用にある種の「汎用」FSM をコーディングできる方法があるかどうか疑問に思っていました。
私のゲームはコンポーネント指向の設計なので、FSM コンポーネントを使用します。
私の有限状態マシン (FSM) コンポーネントは、多かれ少なかれこのように見えます。
この FSM コンポーネントを汎用にする方法について、ご意見/アイデアや提案をお待ちしております。ジェネリックとは、次のことを意味します。
1) xml ファイルから fsmTable を作成するのは非常に簡単です。つまり、MAX_STATESxMAX_ACTION マトリックスを作成するためにロードできる整数の集まりです。
2)しかし、「アクションを実行」メソッドはどうですか?
「アクション」とスイッチを汎用にしたい場合はどうすればよいですか?
これは、それぞれに対して異なる FSM コンポーネント クラスを作成することを避けるためGameEntity
です。( gecFSMZombie
、gecFSMDryad
などgecFSMBoss
?)。これにより、「データ駆動型」になり、たとえばファイルから汎用 FSM を構築できます。
あなたは何を提案しますか?
algorithm - 有限状態マシンを使用することは、一般的なテキスト解析に適した設計ですか?
16進数で埋められたファイルを読んでいます。特定のパターンを特定する必要があります。たとえば、「aaad」(引用符なし)と言います。パターンを見るたびに、他のファイルにデータを生成します。
これは、プログラムを設計する際に非常に一般的なケースです。特定のパターンを解析して検索します。
私はそれを有限状態マシンとして設計し、switch-case
状態を変更するために使用してCで構造化されました。これは私に起こった最初の実装でした。
- デザイン:より良いデザインはありますか?
- 実装:前述のように、スイッチケースの使用に問題がありますか?
python - What is the Pythonic way to implement a simple FSM?
Yesterday I had to parse a very simple binary data file - the rule is, look for two bytes in a row that are both 0xAA, then the next byte will be a length byte, then skip 9 bytes and output the given amount of data from there. Repeat to the end of the file.
My solution did work, and was very quick to put together (even though I am a C programmer at heart, I still think it was quicker for me to write this in Python than it would have been in C) - BUT, it is clearly not at all Pythonic and it reads like a C program (and not a very good one at that!)
What would be a better / more Pythonic approach to this? Is a simple FSM like this even still the right choice in Python?
My solution:
c++ - 有限ステート マシン パーサー
C++ でFSM のようなパーサーを使用して、自己設計したファイル形式を解析したいと思います(これはteach-myself-c++-the-hard-way-by-doing-something-big-and-difficult
一種のプロジェクトです:))。euh... 行の終わりを示す改行を含むトークン化された文字列があります。入力例はこちらをご覧ください。すべてのコメントは除外され、ジャンクは除外されるため、次のような std::string があります。
構文の説明:
- { } はスコープであり、大文字の単語はオプション/ファイルのリストが続くことを示します。
- \n は、オプション/ファイルのリストでのみ重要であり、リストの終わりを示します。
そのため、FSM は私のニーズや知識に対して十分にシンプルで拡張性があると考えました。私が知る限り (そして私のファイル設計をそうあるようにしたい)、並行状態やそのような凝ったものは必要ありません。いくつかの設計/実装に関する質問:
enum
状態に anまたは抽象class
+ 導関数を使用する必要がありますか? 最初の構文はおそらく小さな構文には適していますが、後で醜くなる可能性があり、2 番目の構文は正反対です。その単純さのために、私は最初のものに傾いています。enum
例とクラスの例。編集: に対するこの提案goto
はどうですか? C++ では悪だと思いましたか?- リストを読むとき、無視する必要はありません
\n
。string
viaを使用する私の好みの方法は、デフォルトstringstream
で無視\n
されます。stringstream
したがって、特定の状態が有効になっているときに改行を無視しないように(同じように)伝える簡単な方法が必要です。 enum
複数レベルの解析 ( scopes 内のスコープ) には単純な状態で十分です{...{...}...}
か、それともハッキーな実装が必要ですか?- 私が考えているドラフト状態は次のとおりです。
upper
: グローバル、exe、lib+ ターゲット名を読み取ります...normal
: スコープ内で、SOURCES を読み取ったり、ユーザー変数を作成したりできます...list
: 改行に遭遇するまで項目をリストに追加します。
各スコープには一種の条件 (例: win32:global { gcc:CFLAGS = ... }) があり、どこでもまったく同じ方法で処理する必要があります (list
状態であっても、アイテムごとに)。
ご意見ありがとうございます。
c++ - C++ FSM の設計と所有権
この構文の FSM/「プッシュダウンオートマトン」パーサーを実装したいと思います:
私は次のものを持っています:
WithB
のevent()
実行 (多くの if-elseif の後) return m_parent->deleteDaughter()
. これが怪しい (そしてクラッシュする) ことはわかっていますがState
、娘から親を返し、娘が漏洩していないState
ことを確認する方法が必要です。State
私のイベントループは次のようになります。
設計とコードの最後の部分を叱る前に、私はここから単純すぎる例を拡張しようとしましたが、これはかなり問題ないようです。わかりやすく簡潔にするために、決定部分を状態自体に移動します。
このテーマに関する本がたくさんあることは理解していますが、私はコンピューター科学者でもプログラマーでもないので、自分でこれを行う方法を学びたいと思っています (もちろん、SO のフレンドリーな人々の助けを借りて)。コンセプトが不明な場合は、お問い合わせください。ありがとう!
scripting - Erlang での階層ステート マシンの実装
ターンベースのゲーム (一種のボードゲーム) を計画していますが、バックエンドはおそらく Erlang で行われる予定です。ゲーム ロジックの部分は階層的なステート マシンに適しているようですが、Erlang でそれを実装する方法がわかりません。
子 fsm ごとに個別のプロセスを生成できるかもしれませんが、これが機能するかどうかはわかりません。
別のオプションは、スクリプト言語を埋め込むか、この目的のために DSL を作成することです。
どう思いますか?
ありがとう。
parsing - Ragel でテンプレート言語を解析するには?
私は単純なテンプレート言語のパーサーに取り組んできました。ラジェルを使用しています。
要件は控えめです。入力文字列のどこにでも埋め込むことができる [[tags]] を見つけようとしています。
{{foo}} などのタグを HTML に埋め込むことができる単純なテンプレート言語を解析しようとしています。これを解析するためにいくつかのアプローチを試みましたが、Ragel スキャナーを使用することに頼らなければならず、単一の文字のみを「キャッチオール」として一致させるという非効率的なアプローチを使用する必要がありました。これは間違ったやり方だと思います。基本的に、スキャナーの最長一致バイアスを悪用して、デフォルトのルールを実装しています (1 文字の長さしかないため、常に最後の手段にする必要があります)。
(アクションはルビで書かれていますが、理解しやすいはずです)。
このような単純な言語のパーサーを作成するにはどうすればよいでしょうか? Ragel は適切なツールではないでしょうか? このような構文が予測できない場合は、Ragel の歯と爪と戦わなければならないようです。
c# - ステート パターンを使用した階層ステート マシンのベスト プラクティスは何ですか?
ステート パターンを使用して、C# で階層ステート マシンを実装しようとしています。ガイドとして、この例を使用しています。ただし、この例では、階層状態に関する回答は提供されていません。残念ながら、他の場所で良い例を見つけることができないようです。私の最初の考えは、階層状態のネストされたクラスを作成することです。しかし、これはベストプラクティスと見なされますか、それともより良い解決策がありますか?
ごきげんよう!
アップデート:
上記の状態パターンを実装しようと、午後中ずっと座っていました。HSM は非常に単純なメディア プレーヤーに基づいています。
代替テキスト http://www.freeimagehosting.net/uploads/e8d2d6486a.jpg
私はそれをやったと思ったが、私が理解していないことが1つある。最初に私が書いたコード(申し訳ありませんが、かなりたくさんあります):
MediaPlayer クラスでイベントを定義するとき、他の関数を呼び出すことができません
- OnButtonPressed
- OffButtonPressed
だから、私の実装は良いのでしょうか? なにが問題ですか?複合パターンを使用するという提案も見ようとしましたが、状態パターンでどのように使用する必要があるかわかりません。誰でも助けてくれることを願っています!
c++ - プログラム全体をFSMとして構築するための優れた設計ですか?
私はここのようなFSM/プッシュダウンオートマトンアプローチを使用してパーサーを構築しました(そしてそれはうまくいきます!):C ++ FSMの設計と所有権 パーサーで問題が発生したときに正常に終了し、有用なエラーメッセージをユーザーに出力できますステージ。
プログラムの残りの部分でそれを実行するための良い方法について考えていましたが、当然、パーサーのアプローチが頭に浮かびました...
私はすべてのオブジェクトを状態にします。これには、実行の段階に応じてオブジェクト固有の関数を呼び出すswitchステートメントを持つ単一のevent()関数があります。オブジェクト固有の列挙型を使用してそれを追跡し、コードをより読みやすくすることができます(case parser
より読みやすくなりcase 5
ます)。m_parent*
これにより、(他の質問のアプローチを使用して)作成した状態のプッシュダウンツリーを閉じることができます。
これは良い設計ですか(FSMモードですべてを強制します)?より良い方法はありますか、そしてそれはどれほど複雑になりますか(FSMの実装とテストは非常に簡単だと思います)?
提案をありがとう!
PS:ブーストには必要なものがすべて揃っていることは知っていますが、特にブーストについては、外部の依存関係を制限したいと思います。c ++ 0xは問題ありません(ただし、ここではあまり関係ないと思います)