Nowicjusze formalizmu maszyny stanowej często mylą diagramy stanów z diagramami przepływów. Poniższy rysunek przedstawia porównanie diagramu stanów z diagramem przepływów. Maszyna stanów (panel (a)) wykonuje akcje w odpowiedzi na jawne zdarzenia. W przeciwieństwie do tego, diagram przepływu (panel (b)) nie potrzebuje jawnych zdarzeń, ale raczej przechodzi z węzła do węzła w swoim grafie automatycznie po zakończeniu działań.
Węzły diagramów przepływu są krawędziami w indukowanym grafie stanów. Powodem tego jest to, że każdy węzeł w diagramie przepływu reprezentuje polecenie programu.Polecenie programu jest akcją do wykonania.Nie jest więc stanem, ale gdy zostanie zastosowane do stanu programu, powoduje przejście do innego stanu.
Szczegółowo, listing kodu źródłowego reprezentuje graf programu.Wykonanie grafu programu (parsowanie i interpretacja) skutkuje grafem stanu.Tak więc każdy graf programu indukuje graf stanu.Konwersja grafu programu do powiązanego z nim grafu stanu jest nazywana „rozwijaniem” grafu programu.
Graf programu jest sekwencją poleceń.
Jeżeli nie istnieją żadne zmienne, to stan składa się tylko z licznika programu, który śledzi, w którym miejscu programu znajdujemy się podczas jego wykonywania (jakie jest następne polecenie do wykonania).
W tym przypadku przed wykonaniem polecenia licznik programu znajduje się na pewnej pozycji (stan przed wykonaniem polecenia).Wykonanie polecenia przesuwa licznik programu do następnego polecenia.Ponieważ licznik programu jest całym stanem, wynika z tego, że wykonanie polecenia zmieniło ten stan.Tak więc samo polecenie odpowiada przejściu między dwoma stanami.
Teraz rozważmy pełny przypadek, gdy zmienne istnieją i są pod wpływem wykonywanych poleceń programu.Wtedy między różnymi lokalizacjami licznika programu, nie tylko zmienia się licznik programu, ale zmienne mogą również zmieniać wartości, z powodu wykonywanych poleceń.W związku z tym, nawet jeśli powtórzymy jakieś polecenie programu (np. w pętli), nie oznacza to, że program jest w tym samym stanie.
W poprzednim przypadku program byłby w tym samym stanie, ponieważ cały stan to tylko licznik programu, więc jeśli licznik programu wskazuje na tę samą pozycję (następne polecenie), to wystarczy określić, że jesteśmy w tym samym stanie.Jeśli jednak stan zawiera zmienne, to jeśli zmienią one wartość, możemy być w tym samym miejscu programu z różnymi wartościami zmiennych, czyli w innym stanie w przestrzeni stanów programu. Termin „rozkładanie” pochodzi od tego mnożenia lokalizacji podczas tworzenia grafu stanu z grafu programu.
Prezentatywnym przykładem jest pętla do inkrementująca jakiś licznik, aż do jego przepełnienia i ponownego uzyskania wartości 0.Chociaż pętla do wykonuje to samo polecenie inkrementacji iteracyjnie, więc graf programu wykonuje cykl, w jego przestrzeni stanów nie jest cyklem, ale linią. Wynika to z tego, że stan jest lokalizacją programu (tutaj cykliczną) połączoną z wartością licznika, która jest ściśle rosnąca (aż do przepełnienia), więc różne stany są odwiedzane kolejno, aż do przepełnienia.Po przepełnieniu licznik ponownie staje się równy 0, więc stan początkowy jest ponownie odwiedzany w przestrzeni stanów, zamykając cykl w przestrzeni stanów (zakładając, że licznik został zainicjalizowany na 0).
Powyższy rysunek próbuje pokazać to odwrócenie ról poprzez wyrównanie łuków diagramów stanów z etapami przetwarzania w diagramie przepływu.
Można porównać diagram przepływu do linii montażowej w produkcji, ponieważ diagram przepływu opisuje postęp jakiegoś zadania od początku do końca (np, przekształcenie wejściowego kodu źródłowego w kod obiektowy przez kompilator). Maszyna stanów generalnie nie ma pojęcia takiego postępu. Na przykład, maszyna stanów drzwi pokazana na górze tego artykułu, nie jest w bardziej zaawansowanym stadium, gdy jest w stanie „zamknięty”, w porównaniu do stanu „otwarty”; po prostu reaguje inaczej na zdarzenia otwarcia/zamknięcia. Stan w maszynie stanów jest efektywnym sposobem określania konkretnego zachowania, a nie etapu przetwarzania.