Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: использовал ли кто yacc, lexx в МК
Форум разработчиков электроники ELECTRONIX.ru > Cистемный уровень проектирования > Операционные системы > Программирование
SyncLair
Здравствуйте, есть такие программы как построители программ лексических анализаторов, используются при проектировании компиляторов, трансляторов интерпретаторов и прочее.
Есть ли у кого опыт применения подобных вещей в МК?
Какова тут может быть сфера применения? Можете рассказать, поделиться примерами описания своих языков и грамматик.

Опыт у меня почти нулевой.

Хочу понять, можно ли такие вещи использовать в практике программирования МК, ну например для реализации парсинга каких-нибудь сетевых протоколов. Чем подкупает, на первый взгляд, данные программы тем, что можно описывать форматы данных сетевых пакетов, сообщений и быстро их менять. Ну например сегодня у Вас поле занимает два байта, а завтра три. Или была строка цифр только целочисленного числа, а теперь нужно чтобы число было с плавающей точкой.

Или вообще это жутко неэффективно и чаще всего посоветуете кодить по старинке.
halfdoom
Цитата(SyncLair @ Jan 10 2012, 23:14) *
Или вообще это жутко неэффективно и чаще всего посоветуете кодить по старинке.

Все "зависит от". Разбор бинарных протоколов лучше делать вручную, со всеми проверками на ошибки. Если речь идет о средней сложности командной строке, то разбор на лексемы можно описать на lex'e, но, как правило, это будет избыточным. И уж если требуется что-то совсем развесистое, с навороченным и регулярным синтаксисом, тогда конечно, lex/bison в помощь.
AlexandrY
Цитата(SyncLair @ Jan 10 2012, 22:14) *
Хочу понять, можно ли такие вещи использовать в практике программирования МК, ну например для реализации парсинга каких-нибудь сетевых протоколов. Чем подкупает, на первый взгляд, данные программы тем, что можно описывать форматы данных сетевых пакетов, сообщений и быстро их менять. Ну например сегодня у Вас поле занимает два байта, а завтра три. Или была строка цифр только целочисленного числа, а теперь нужно чтобы число было с плавающей точкой.


Парсеры работают по жестким схемам задаваемым в нотациях типа BNF (Backus Naur Form).
Правильно построить и без смысловых ошибок такую детализированную схему это задача не легче чем в ручную распарсить протокол.
Потом сгенерированные парсеры будут очень медлительны.

Легче выбрать протокол из готовых универсальных.
Например на базе универсального описания синтаксиса данных ASN.1 c соответствующей кодировкой типа BER.
Парсер ASN.1 можно найти в бесплатных стеках протоколов TCP/IP в которых есть протокол SNMP.
Там уже предусмотрены все разумные типы данных: int, float, string, boolean ...
Хотя конечно будет избыточность из-за явной передачи типа данных. Но бинарное сжатие делает его не сильно заметным.
SyncLair
Цитата(AlexandrY @ Jan 11 2012, 11:01) *
Например на базе универсального описания синтаксиса данных ASN.1 c соответствующей кодировкой типа BER.
Парсер ASN.1 можно найти в бесплатных стеках протоколов TCP/IP в которых есть протокол SNMP.

Интересно -- посмотрим на эту штуку ASN спасибо.

Цитата(SyncLair @ Jan 11 2012, 00:14) *
Есть ли у кого опыт применения подобных вещей в МК?
Какова тут может быть сфера применения? Можете рассказать, поделиться примерами описания своих языков и грамматик.

Я так понимаю ни у кого опыта применения в сфере МК нет, видимо задачи не те.
voidlizard
Цитата(SyncLair @ Jan 11 2012, 13:23) *
Интересно -- посмотрим на эту штуку ASN спасибо.


Я так понимаю ни у кого опыта применения в сфере МК нет, видимо задачи не те.


Я Ragel успешно использовал на MSP430 и STM32, вывод модема парсить, HTTP и проч. yacc/lexx, по моему, малоподходящий код для микроконтроллеров генерируют. Ragel вполне ок - компактно, быстро, никаких зависимостей.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.