Nein, praktisch sowieso nicht. Eine Zustandsmaschine merkt sich normalerweise nur ein Datenelement: ihren aktuellen Zustand.
Eine typische Anwendung eines FSM ist das Lexen oder Parsen. Wenn wir zum Beispiel lexen, ist es (normalerweise) ziemlich einfach, die Aktionen für jede mögliche Eingabe in Bezug auf den aktuellen Status und den Wert der Eingabe zu codieren.
Zum Beispiel könnten wir einen NUMBER-Status haben, in dem wir die Ziffern einer Zahl lesen. Wenn das nächste Zeichen, das wir lesen, eine Ziffer ist, bleiben wir im Zustand NUMBER. Wenn es sich um ein Leerzeichen oder einen Tabulator handelt, geben wir die Ziffern zurück und kehren dann zu einem WHITE_SPACE-Status oder etwas in dieser Reihenfolge zurück.
Nun ist es sicherlich wahr, dass in einem typischen FSM (insbesondere einem, der in Software implementiert ist) Teile und Bestandteile vorhanden sind, die technisch nicht ganz in ein FSM passen, das mit dem FSM selbst gemischt ist. Wenn Sie beispielsweise Ziffern einer Zahl lesen, werden Sie häufig die Position der ersten Ziffer speichern. Wenn Sie also am Ende angelangt sind, können Sie den Wert der Zahl leicht berechnen.
Das FSM selbst hat einige Einschränkungen - es hat keinen Zählmechanismus. Stellen Sie sich zum Beispiel eine Sprache vor, die "/ " zum Starten eines Kommentars und " /" zum Beenden eines Kommentars verwendet. Sein Lexer würde wahrscheinlich einen COMMENT-Status haben, den er eingegeben hat, als er ein '/ ' Token sah. Es gibt derzeit keine Möglichkeit (außer dem Hinzufügen eines weiteren Status wie COMMENT2), ein weiteres "/ " zu erkennen und zu erkennen, dass es sich um einen verschachtelten Kommentar handelt. Vielmehr wird im Kommentarzustand erkannt */
, dass der Kommentarzustand verlassen werden soll, und bei allen anderen Änderungen wird der Kommentarzustand beibehalten.
Wie bereits erwähnt, werden Sie sicherlich könnten einen KOMMENTAR2 Zustand für einen verschachtelten Kommentar enthalten - und dass ein comment3 Zustand, und so weiter. Irgendwann werden Sie es jedoch satt haben, weitere Status hinzuzufügen, und das bestimmt die maximale Verschachtelungstiefe, die Sie für Kommentare zulassen. Mit einer anderen Form von Parser (dh nicht einer reinen Zustandsmaschine, sondern mit etwas Speicher, der zählt) können Sie einfach Ihre Verschachtelungstiefe direkt verfolgen, sodass Sie im COMMENT-Zustand bleiben, bis Sie ein enges Kommentarzeichen dafür erhalten Gleicht den ersten Wert aus, sodass Ihr Zähler auf 0 zurückgeht und Sie den COMMENT-Status verlassen.
Wie gesagt, wenn Sie einen solchen Zähler hinzufügen, ist das, was Sie haben, nicht mehr wirklich ein FSM. Zur gleichen Zeit, es ist eigentlich ziemlich nah - speziell, nahe genug , dass Sie den Zähler simulieren können nur mehr Zustände hinzufügen.
In einem typischen Fall jedoch, wenn jemand über die Implementierung einer FSM in Software spricht, wird er diese einigermaßen "rein" halten. Insbesondere reagiert die Software auf die aktuelle Eingabe nur basierend auf dem aktuellen Status und dem Wert der Eingabe selbst. Wenn die Reaktion von vielem abhängt, wird sie normalerweise nicht als Zustandsmaschine bezeichnet (zumindest wenn sie wissen, wovon sie sprechen).