fk0, легенда (14.03.2012 15:52, просмотров: 104) ответил =AlexD= на Я всё не пойму, ты правда даун, или прикидываешься? Всё сказанное мной из моей реальной практики. Четыре автомата - четыре байта хранения состояний. Плюс накладных расходов пару указателей. Сущие копейки. Короче завязывай с куревом.
За такую манеру разговора за пределами интернета ты давно бы в табло получил. А если по существу: изначальное утверждение (отматываем тред на 3 сообщение выше) мол "вообще не требует памяти, нужен один символ" -- ЛОЖНО (память автомата -- тоже память). Дальше начинаются какие-то условности. Один автомат или четыре. 4 байта -- это уже 2^32 состояний. И не байта. Потом выяснится, что автомат должен знать предыдущий символ, например. И не один, а по-меньшей мере на весь токен (иначе как он поймёт, что он принял именно тот токен). И не будет важно, хранятся ли эти символы в переменной состояния автомата или неком "буфере". Потом нужна память на предыдущие токены для грамматического анализа. И опять же не важно, в виде состояния автомата или в неком "буфере". Объём примерно одинаковый. Есть разница, разбирать ли сразу на токены, либо предварительно делить на строки. Я выше указал почему есть и в чём выражается. И наконец разбор конкретных значений, чисел, например, можно вести тем же автоматом _с_ _памятью_ соответствующего объёма (все символы числа, пока опустим вопрос в каком представлении, это лишь экономит отдельные биты), либо ещё раз выделить память и поручить библиотечному sscanf. То же самое касается и функций сравнения строк, например. Вряд ли стоит избегать библиотечных функций (это вообще отдельная история, printf без ошибок пишется не за один день). А они работают с памятью, а не с состояниями. И я также указал выше, что практически всегда удобно хранить полную копию строки ещё -- для её вывода в сообщении об ошибке (если при разборе строка разрушается функциями вроде strtok, например). ВЫВОДЫ: автоматный подход практически ничем, кроме переусложнённого программирования не лучше. Может быть, если очень сильно в этом закопаться можно сэкономить несколько десятков байт. Но вряд ли оно того стоит.
[ZX]