566
ГЛАВА 10. МЕТОДЫ ПРОГРАММИРОВАНИЯ ОТ СОСТОЯНИЙ
символ-условие перехода и ассоциированное действие. Вход и выход обозна-
чаются черными прямоугольными блоками. При желании их можно считать
специальными состояниями, с которыми ассоциированы действия инициа-
лизации и завершения процесса. Состояние
St2
изображено штриховой ли-
нией, поскольку анализ его еще не проведен.
Таким образом появляются новые состояния (в примере —
St2
). Для ка-
ждого из них следует определить условия перехода и соответствующие им
действия.
В рассматриваем случае в состоянии
St2
возможны действия:
2 с сохранением состояния,
3 с переходом в другое состояние, которому дается временное имя
St3
и
5 окончание слова и всего потока, завершение обработки.
После этого построения проверяется, не является новое состояние копией
уже имеющегося как по действиям, так и по переходам. Если это так, то но-
вое состояние можно отождествить (склеить) с одним из ранее построенных.
Вновь появляющиеся состояния анализируются аналогично.
Для решаемой задачи легко выяснить, что состояние
St3
требует тех же
действий и переходов, что и
St1
. Следовательно, возможна склейка этих двух
состояний и построение графа завершается, так как новых состояний нет
(см. рис. 10.3). При желании, чтобы не дублировать действия “Завершить
процесс” можно еще определить еще одно, заключительное состояние, с вы-
ходом из которого будет ассоциировано это действие (один раз!). Понятно,
что это состояние будет иметь нестандартный переход.
Представленный метод выявления состояний конечного автомата годится
для не очень больших задач, когда строящийся граф остается обозримым. Он
может быть улучшен, если в ходе анализа задачи заранее удается выявить со-
держательно обособленные состояния и переходы между ними. Так,для дан-
ной задачи вполне очевидно, что обрабатывающая программа должна рабо-
тать по-разному,когда слово еще не началось, и когда уже прочитаны его пер-
вые символы. Иными словами, вычислительный процесс может находиться
в двух состояниях: ожидание начала слова (
St1
) и ожидание окончания слова
(
St2
). Для каждого из них можно указать набор действий, ассоциированных
с переходами, которые явно зависят от содержательного смысла состояний.
Содержательное выделение состояний удобно. В частности, можно себе
позволить строить недетерминированный конечный автомат, т. е. такой, у ко-
торого есть состояния с разными переходами, определяемыми одним и тем