Я читаю данные из (последовательного) порта, используя неблокирующую функцию read() (в C/C++). Это означает, что при каждом «опросе» порта данные вводятся в куски неопределенных (но сообщаемых) размеров (включая 0). Затем мне нужно проанализировать этот «поток» для определенных шаблонов (а не XML).Инкрементный анализ строк в C++
Моя наивная реализация объединяет новую строку с предыдущей строкой потока каждый раз, когда read() возвращает ненулевой буфер и повторно разбирает всю строку. Когда шаблон сопоставляется, соответствующая часть отбрасывается, оставляя только хвост строки в следующий раз.
Очевидно, что существует гораздо более эффективный способ сделать это, например, инкрементный синтаксический анализ a-la SAX, декаподобных буферов или аналогичных струнных срезов и т. Д. Кроме того, очевидно, что я не первый, кто должен это делать тип анализа потока.
Кто-нибудь знает о какой-либо библиотеке, которая уже делает подобные вещи? Предотвращение переполнения памяти в случае отсутствия совпадений шаблонов также будет большим плюсом.
Спасибо, Adi
Какой тип соответствия вам нужно сделать? – 2010-07-13 21:00:40
Я должен поддерживать несколько разных устройств, поэтому мне нужен более обобщенный синтаксический анализатор. В настоящее время я ищу строку заголовка и нижнюю колонтитулу и возвращаю это «предложение» для последующего дополнительного синтаксического анализа. На самом деле, я надеялся на более общий парсер, например. регулярное выражение. –