Я не уверен, что правильно понял вопрос, но так как вы выполняете шаги в последовательности, я буду предполагать, что некоторая контекстная информация сохраняется, и, таким образом, вы говорите о выборе следующего шага на основе результата текущего один.
Это, собственно, и есть автомат. У вас есть различные состояния, связанные между собой переходами.
Довольно просто попросить каждый шаг возвращать некоторое tag
, возможно, просто строку или соответствующий тип.
Затем вы определяете автомат, определяя следующий шаг для каждого из возможных выходных данных текущего шага.
Например, я на самом деле использую фреймворк (на работе), который принимает эти переходы как файл xml
... хотя мне очень не нравится тот факт, что мало проверено, правильно ли определены переходы .
Обратите внимание, что в C ++ это может быть проверено во время компиляции (я думаю об использовании Boost.Variant
и некоторых приемах программирования с метатемплатой).