Nie, praktycznie nie. Maszyna stanów skończonych zwykle zapamiętuje tylko jeden element danych: jego aktualny stan.
Typowym zastosowaniem FSM jest leksykowanie lub parsowanie. Na przykład, gdy wykonujemy leksykację, (normalnie) dość łatwo jest zakodować akcje dla każdego możliwego wejścia pod względem stanu bieżącego i wartości wejścia.
Na przykład możemy mieć stan NUMER, w którym czytamy cyfry liczby. Jeśli następnym znakiem, który czytamy, jest cyfra, pozostajemy w stanie NUMERYCZNYM. Jeśli jest to spacja lub tabulator, zwracamy cyfry, a następnie przechodzimy do stanu WHITE_SPACE lub czegoś w tej kolejności.
Teraz z pewnością jest prawdą, że w typowym FSM (szczególnie takim, który jest zaimplementowany w oprogramowaniu) otrzymujemy bity, które technicznie nie pasują do FSM zmieszanego z samym FSM. Na przykład, gdy czytamy cyfry liczby, często zapisujesz pozycję pierwszej cyfry, więc kiedy dojdziesz do końca, możesz łatwo obliczyć wartość liczby.
Sam FSM ma pewne ograniczenia - nie ma mechanizmu liczenia. Rozważmy na przykład język, w którym „/ ” zaczyna się od komentarza, a „ /”, aby zakończyć komentarz. Lexer prawdopodobnie miałby stan KOMENTARZA, do którego wszedł, gdy zobaczył token „/ ”. W tym momencie nie ma możliwości (poza dodaniem kolejnego stanu, takiego jak COMMENT2) wykrycia kolejnego „/ ” i uświadomienia sobie, że zajmuje się zagnieżdżonym komentarzem. Zamiast tego w stanie komentarza rozpozna, */
że nakazuje mu pozostawienie komentarza, a wszystko inne pozostawia go w stanie komentarza.
Jak już wspomniano, na pewno mógłby obejmować stan comment2 dla zagnieżdżonego komentarz - i tym, że stan COMMENT3, i tak dalej. W pewnym momencie będziesz jednak miał dość dodawania kolejnych stanów, a to określi maksymalną głębokość zagnieżdżania, na jaką zezwalasz na komentarze. W przypadku innej formy parsera (tj. Nie jest to maszyna stanu czystego, ale coś, co ma trochę pamięci, aby mogła się liczyć), możesz po prostu bezpośrednio śledzić swoją głębokość zagnieżdżania, dzięki czemu pozostajesz w stanie KOMENTARZ, aż dojdziesz do tokena komentarza, który równoważy pierwszy, więc licznik wraca do 0 i wychodzisz ze stanu KOMENTARZ.
Jednak, jak powiedziałem, po dodaniu takiego licznika nie ma już naprawdę FSM. Jednocześnie jest on dość blisko - a konkretnie wystarczająco blisko, aby można było zasymulować licznik, dodając więcej stanów.
Jednak w typowym przypadku, gdy ktoś mówi o implementacji FSM w oprogramowaniu, utrzyma go w miarę „czystym”. W szczególności oprogramowanie zareaguje na bieżący sygnał wejściowy wyłącznie na podstawie aktualnego stanu i wartości samego wejścia. Jeśli reakcja zależy od wielu innych czynników, zwykle nie nazywają tego maszyną stanu (przynajmniej jeśli wiedzą, o czym mówią).