Попробуй дать оценку минимально возможному количеству состояний. Во-первых речь уже не о так называемом "недетерминированном конечном автомате" (Структуры данных и алгоритмы - Ахо, Хопкрофт, Ульман -- для справки). Потому, что он должен же как-то различать слова с одинаковыми префиксами, например. Детерминированный КА отличается тем, что при приёме очередного символа он переходит в некое другое однозначное состояние -- в данном случае, это очевидно не так для одинаковых префиксов у двух токенов, например. Для интересующихся на rsdn есть
статья . Вообще для лексического анализа обычно используются НКА (отсылаю к литературе) и AlexD видимо изобрёл что-то новое не иначе. Так вот обращаться с НКА можно двумя способами далее. Либо как описано в статье, на которую ссылка, сохранять
список возможных состояний, либо преобразовать НКА в ДКА (детерминированный автомат). Выше дана ссылка на книгу, если не ошибаюсь, там приведён подробный метод преобразования. В худшем случае число состояний ДКА примерно пропорционально e
x. Такие вещи не программируются руками попросту ввиду объёма, а если и программируются вообще, то там автомат управляется таблицей, и таблицы генерируются автоматически. Число состояний НКА же, примерно пропорционально числу символов в наиболее длинном токене. Я где-то не прав? И уж стоило бы промолчать про EBNF. Это куда проще. И совершенно непонятно вообще, как не имея формальной грамматики можно (из головы) что-то программировать. Возвращаясь к автоматам -- в случае НКА у него есть память в виде переменной состояния ("множество" -- это не байт и не два, разве что только упаковать его в битовый массив, то может в 4 и влезет), в которой в "неявном" виде хранится анализируемый токен. Чем это отличается от накопления символов в переменной и выполнения strcmp() по списку? Последнее, боюсь, только проще для программирования, чем углубление в теорию автоматов...
Отвечая на ваше сообщение: 4 байта в 4-х ДКА (а тут говорят только о ДКА, всегда когда говорят "автомат"...) -- это N1*N2*N3*N4 состояний, где Nx -- число состояний одного автомата. Да, не 2^32, но достаточно много.