Цитата(sergeeff @ Aug 12 2006, 18:13)

Цитата(yornik @ Aug 12 2006, 16:01)

А в чем Вам видится отличие синтаксического парсера для встроенных приложений от "просто" парсера? %) Ну или иначе - что мешает использовать yacc/bizon?
Ну, например, пришел пакет с данными (через USB или TCP/IP) или просто идет посимвольный прием через паралелльный/последовательный порт. Соответственно принимается за раз только часть команды или даже один символ команды. А yacc/bizon ориентированы на чтение некоторых законченных лингвистических конструкций из входного потока (файла). В этом мне видится коренное отличие. Да и насчет быстродействия в этих системах - это тоже вопрос.
В таких случаях систему строят несколько иначе, чем с "классическими" парсерами. Во-первых, очень чётко оговаривают условия окончания команды, включая таймауты, пропуск пакетов и пр. У "классиков" на входе готовый файл, в случае чего и трапнуться можно, а для встроенных приложений это смертный грех. Всё подозрительное выбрасывается, возможно, с посылкой NAK'а.
Во-вторых, парсеры обычно не универсальные, а сильно ограниченые, с жёсткой структурой строки/пакета. Строятся они примерно по одному и тому-же принципу. Сначала выделяется мнемоника/код команды, после чего всё принятое отдаётся соответствующему обработчику ("хендлеру"). Если формат особо жёсткий, то предварительно разбираются параметры - в жёстком формате они у всех команд однотипны. Обработчик может продолжить ветвление в зависимости от значений параметров.
А вот дальше начинается настоящее Искусство - учёт взаимозависимости команд и/или состояния системы. Поступило три команды - одна уже начала выполняться, можно ли выполнять остальные? Первая долгая, третья короткая, но высокоприоритетная, важная, а вторая просит подтвердить результат выполнения первой...