LINUX.ORG.RU

Применение парсера с протоколами передачи данных

 , ,


0

1

Есть комп->устройство1->устройство2. Устройство1 - посредник в передаче данных между компом и устройством2. Между компом и устройством1 один протокол (например modbus), между устройством1 и устройством2 - другой. На предыдущей работе один мужик хотел, чтобы данные из одного протокола обрабатывались лексическим и синтаксическим анализатором и с их помощью перегонялись в данные для другого протокола. Предлагал использовать Lemon Parser. Так вот вопрос, так можно/нужно делать, или это какой-то дикий костыль?

А протокол поточный? Его грамматика автоматна? Если нет, то других вариантов особо и нет.

vzzo ★★★ ()

Можно и оригинальные флекс с бизоном использовать.

Sorcerer ★★★★★ ()

а не все ли равно как ты разбираешь пакеты исходного протокола?

anonymous ()

lemon — это не парсер, а генератор парсеров для LALR(1) языков: http://www.hwaci.com/sw/lemon/

Для синтаксического анализа (чего угодно, в том числе и вашего протокола) не обязательно использовать ни lemon, ни yacc, bison или сотни других генераторов парсеров. Всегда можно написать парсер руками. Другое дело, что если протокол сложный, рукописный парсер скорее всего будет неправильный и/или неэффективный, тяжело будет вносить изменения.

Какими средствами проводить синтаксический анализ — зависит от сложности протокола. По-хорошему, у протокола должна быть спецификация (формальная грамматика), по которой можно определить его сложность.

Если грамматика регулярная, можно использовать генераторы лексеров: lex, flex, re2c, quex и т.д.

Если грамматика не регулярная (простейший критерий нерегулярности --- наличие вложенных структур), но контекстно-свободная, можно использовать генераторы парсеров типа yacc, bison, lemon и т.д. При этом скорее всего придётся отдельно писать лексер (для генерации которого опять-таки можно использовать lex, flex, re2c, quex и т.д.).

Сравнение разных генераторов парсеров: https://en.wikipedia.org/wiki/Comparison_of_parser_generators

anonymous ()

По мне, так тот мужик был наркоманом.

pathfinder ★★★ ()

мужик хочет странного, но посмотри, например, melange

anonymous ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.