Всем добрый день!
Допустим есть такой код
this->buf += newPart;
std::vector<std::string> messages = tokenizer.Tokenize(this->buf);
буфер передается в токенайзер по ссылке и после этого содержит нераспаршенный хвост на конце буфера, чтобы на след. итерации получить остаток неполного сообщения и завершить парсинг.
Допустим формат мессаги такой
'+'<любые байты кроме контрольных>'-'<два байта контрольной суммы>
Все вроде хорошо. Но появилась потребность использовать такую же логику для другого формата сообщений, но формат уже совершенно другой
'!'<любое кол-во латинских символов и цифр>\r\n
А что делать если появится третий формат? Писать 3 анализатор, или добавлять в текущий еще 3 лексемы?
Вариант с расширением существующего выглядит разумным, но это приводет к разрастанию кода и уменьшению читаемости.
Существует ли некий способ быстро и лаконично описать новый лексичский анализатор? Например через regex. Я их конечно использую время от времени, но не то что бы сильно силен в них...