有限量のストレージを備えたマシンで実行されているシングルスレッドプログラムは、有限状態マシンとしてモデル化できます。有限状態マシンの特定の状態は、関連するすべてのストレージ(ローカル変数、グローバル変数、ヒープストレージ、仮想メモリで現在スワップアウトされているデータ、関連ファイルの内容など)の特定の値を表します。言い換えれば、非常に些細なプログラムであっても、その有限状態モデルには多くの状態があります。
プログラムが持つ唯一の状態が32ビット整数型の単一のグローバル変数であっても、少なくとも2 ^ 32(40億を超える)状態を意味します。そして、それはプログラムカウンターとコールスタックを考慮していません。
プッシュダウンオートマトンモデルは、この種のものに対してより現実的です。有限オートマトンに似ていますが、スタックの概念が組み込まれています。ただし、ほとんどのプログラミング言語のように、実際には呼び出しスタックではありません。
ウィキペディアの説明がありますが、正式な定義セクションで行き詰まってはいけません。
プッシュダウンオートマトンは、一般的な計算のモデル化に使用されます。チューリングマシンは似ていますが、計算能力は同等ですが、IIRCは同一ではありません。
上記のエラーを指摘してくれたkevin clineに感謝します。Wikipediaも指摘しているように、プッシュダウンオートマトンは有限状態マシンよりも強力ですが、チューリングマシンよりも強力ではありません。
この脳のおならがどこから来た私は正直わかりません-私がやる依存文法は文脈自由よりも強力であり、その文脈依存文法は簡単なプッシュダウンオートマトンを使用して解析することができないという状況を知っています。明確なコンテキストのない文法を線形時間で解析することは可能ですが、それを行うには一般に(決定論的な)プッシュダウンオートマトン以上のものが必要であることさえ知っています。したがって、プッシュダウンオートマトンをチューリングマシンと同等に信じるのは奇妙なことです。
多分追加の機械が追加されたプッシュダウンオートマトンを考えていたかもしれませんが、それはプッシュダウンオートマトンと同等の有限オートマトンを数えるようなものです(スタックを追加して活用するだけです)。
プッシュダウンオートマトンは解析において重要です。私はその文脈でそれらに十分に精通していますが、計算のコンピューター科学モデルとしてそれらを実際に研究したことはないので、私はすでに持っている以上の詳細を与えることはできません。
単一のOOPオブジェクトを有限状態マシンとしてモデル化することは可能です。マシンの状態は、すべてのメンバー変数の状態によって決定されます。通常、有効な状態は、メソッド呼び出しの間(ではない)にのみカウントされます。繰り返しますが、一般的に心配する状態はたくさんあります。これは理論モデルとして使用できるかもしれませんが、ささいな場合を除いて、それらの状態をすべて列挙したくないでしょう。
いくつかのモデル化するために、けれどもそれは、かなり一般的である側面有限状態マシンを使用して、オブジェクトの状態を。一般的なケースは、ゲームオブジェクトのAIです。
これは、プッシュダウンオートマトンモデルを使用してパーサーを定義するときに通常行われることでもあります。状態モデルには有限の状態セットがありますが、これはパーサーの状態の一部のみをモデル化します。追加の情報は、その状態とともに追加の変数に格納されます。これにより、たとえば40億の1整数の状態の問題が解決されます。すべての状態を列挙せず、整数変数を含めるだけです。ある意味ではプッシュダウンオートマトン状態の一部ですが、ダイアグラムに40億個の状態バブルを描画するよりもはるかに管理しやすいアプローチです。