организую приём команд от BT/WiFi модулей построчно (небольшой
буфер чтоб поместилась строка, заканчивающаяся CRLF и учётом
таймаута приёма, а потом посимвольный парсинг с учётом того, что
пробел, как правило, - разделитель). Но парсить приходится по
индивидуальным правилам, в зависимости от ситуации, разные отклики
на разные команды (фактически ветвление с прямым сравнением с
шаблонами) по сути функциональный аналог оператора "case". Одиночные пакеты, - параметры-отклики на команды, к примеру запрос текущего IP-адреса, парсятся без проблем, а вот многострочный отклик с непредсказуемыми таймаутами очень геморройный (например сканирование эфира и показ обнаруженных точек доступа). В любом случае, универсальный парсер построить не получится, вероятно. Ограничивайтесь столько теми командами с которым работаете.
У меня в таких случаях парсер - прямым и тупым ветвление со сравнениями, с учётом ожидаемого отклика. Т.е. даём, к примеру AT-команду и после неё прыгаем на процедуру парсинга именно ожидаемого отклика. Т.е. на каждый отклик, по сути свой парсер с жёсткими правилами. Так получается проще и компактнее.