Вроде как должно быть очевидно, что UART выдаёт символьный поток входящих данных. Который естественно обрабатывается посимвольно. О чём вам и писали. Обрабатывая его посимвольно, находим границы (начало и конец) ваших лексем. И, найдя их, считаем хеш от тех символов, которые находятся в границах лексем. Когда происходит переход за заднюю границу лексемы (обнаруживается её конец), то тут и производим поиск по таблице накопленного к этому моменту хеша.
Всё вышеописанное должно быть априори известно любому более-менее опытному программисту, который когда-либо парсил строки, поступающие из UART.
Это потоковая, посимвольная обработка. Без всяких буферов, строк и прочей ненужной шелухи. Быстрая.