Каркас для построения структурированных парсеров двоичных данных? - PullRequest
9 голосов
/ 15 марта 2011

У меня есть некоторый опыт генерации кода типа Pragmatic-Programmer: указание структуры данных в независимом от платформы формате и написание шаблонов для генератора кода, который использует эти файлы структуры данных и создает код, который вытягивает необработанные байты в язык, специфичный для конкретного языка.структуры данных, выполняет масштабирование числовых данных, распечатывает данные и т. д. Хорошие прагматичные идеи (TM) заключаются в том, что (а) я могу изменить структуры данных, изменив файл спецификации и восстановив источник (который является СУХИМ и все такое) и (b) я могу добавить дополнительные функции, которые можно сгенерировать для всех моих структур, просто изменив мои шаблоны.

Я использовал сценарий Perl под названием Jeeves , который работал,но это общее назначение, и любые функции, которые я хотел написать для манипулирования своими данными, которые я писал с нуля.

Существуют ли какие-либо фреймворки, которые хорошо подходят для создания синтаксических анализаторов для структурированных двоичных данных? То, что я прочитал об Antlr, говорит о том, чтоперебор.Мои текущие целевые языки, представляющие интерес, - это C #, C ++ и Java, если это имеет значение.

Спасибо, как всегда.

Редактировать: Я вознагражу за этовопрос.Если есть какие-то области, в которых я должен искать это (ключевые слова для поиска) или другие способы решения этой проблемы, которые вы разработали сами, я хотел бы услышать о них.

Ответы [ 2 ]

4 голосов
/ 10 ноября 2016

Также вы можете взглянуть на относительно новый проект Kaitai Struct, который предоставляет язык для этой цели, а также имеет хорошую IDE: Kaitai.io

2 голосов
/ 18 марта 2011

Вам может показаться интересным ASN.1 , поскольку он предоставляет удобный способ описания данных, которые вы, возможно, обрабатываете. Если вы используете ASN.1 для абстрактного описания данных, вам нужен способ отобразить эти абстрактные данные в конкретные двоичные потоки, для которых ECN (кодировка управления кодированием) , вероятно, является правильным выбором.

New Jersey Machine Toolkit на самом деле ориентирован на двоичные потоки данных, соответствующие наборам команд, но я думаю, что это расширенный набор только двоичных потоков. Он имеет очень хорошие возможности для определения полей в виде битовых строк и автоматической генерации методов доступа и генераторов таких. Это может быть особенно полезно если ваши двоичные структуры данных содержат указатели на другие части потока данных.

...