They are heavily used in natural language processing, e.g. for modeling dictionaries (using finite state transducers, where the input side has the inflected form, output side has the dictionary form+part of speech), part of speech taggers (markov chains can be implemented by finite state machines).<p>Note also that regular expressions (the kind you find in sed&#x2F;awk, not the perl extended stuff) are equivalent in power to finite state machines – a regex can be modelled by an FSM, and an FSM can be turned into a regex.<p>Outside of NLP, they can be used anywhere you can implement your logic as a transition table with rows like &quot;fromstate,input,tostate,action&quot;. I believe it&#x27;s common for many servers and network stuff to do this. <a href="https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;State_pattern" rel="nofollow">https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;State_pattern</a> and <a href="https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Automata-based_programming#Example" rel="nofollow">https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Automata-based_programming#Exa...</a> have some fairly traditional examples.<p>One of the plus-sides of finite state machines is that they are formally <i>less powerful</i> than full turing machines. This might make it easier to check that a program does what it should, but they also compose in ways that full turing machines (or intermediate-level machines like context-free or context-sensitive) can&#x27;t. E.g. you can take two FSM&#x27;s, and do a set intersection&#x2F;union&#x2F;difference&#x2F;kleene star&#x2F;concatenation&#x2F;reverse and still stay within finite state (unlike e.g. context free, where you can&#x27;t do intersection&#x2F;difference). But it also means there are certain types of logic you can&#x27;t express within finite state.