Нет, практически нет. Конечный автомат обычно запоминает только один фрагмент данных: его текущее состояние.
Типичное применение FSM - это лексирование или разбор. Например, когда мы выполняем лексические операции, (обычно) довольно легко кодировать действия для каждого возможного ввода с точки зрения текущего состояния и значения ввода.
Например, у нас может быть состояние NUMBER, в котором мы читаем цифры числа. Если следующий символ, который мы читаем, является цифрой, мы остаемся в состоянии NUMBER. Если это пробел или табуляция, мы возвращаем цифры и затем переходим в состояние WHITE_SPACE или что-то в этом порядке.
Теперь, безусловно, верно, что в типичном FSM (особенно в программном обеспечении) мы получаем кусочки, которые технически не совсем соответствуют FSM, смешанным с самим FSM. Например, когда мы читаем цифры номера, вы часто сохраняете позицию первой цифры, поэтому, когда вы дойдете до конца, вы можете легко вычислить значение числа.
Сам FSM имеет некоторые ограничения - у него нет механизма подсчета. Рассмотрим, например, язык, который использует «/ » для начала комментария и « /» для завершения комментария. Его лексер, вероятно, имел бы состояние COMMENT, в которое он вошел, когда увидел токен '/ '. На этом этапе он не может (кроме добавления другого состояния, такого как COMMENT2) обнаружить другое "/ " и понять, что имеет дело с вложенным комментарием. Скорее, в состоянии комментария он распознает */
как выход из состояния комментария, а все остальное оставляет его в состоянии комментария.
Как уже упоминалось, вы, конечно, могли включить состояние COMMENT2 для вложенного комментария - и в этом состояние COMMENT3 и так далее. Однако в какой-то момент вам надоест добавлять новые состояния, и это будет определять максимальную глубину вложения, которую вы допускаете для комментариев. С какой-то другой формой синтаксического анализатора (то есть, не с помощью конечного автомата, а с чем-то, что имеет некоторую память для подсчета), вы можете просто отслеживать глубину вложенности напрямую, поэтому вы остаетесь в состоянии COMMENT до тех пор, пока не достигнете жетона близких комментариев, балансирует первый, поэтому ваш счетчик возвращается к 0, и вы выходите из состояния COMMENT.
Однако, как я уже сказал, когда вы добавляете счетчик таким образом, то, что у вас есть, больше не является настоящим ФСМ. В то же время он на самом деле довольно близок - в частности, достаточно близко, чтобы вы могли смоделировать счетчик, просто добавив больше состояний.
Однако в типичном случае, когда кто-то говорит о внедрении FSM в программное обеспечение, он будет держать его достаточно «чистым». В частности, программное обеспечение будет реагировать на текущий вход только на основании текущего состояния и значения самого входа. Если реакция зависит от чего-то еще, они обычно не будут называть это конечным автоматом (по крайней мере, если они знают, о чем говорят).