Выпуск языка описания бинарных форматов Kaitai Struct 0.7

Доступен релиз декларативного языка описания бинарных форматов файлов и протоколов Kaitai Struct 0.7. Язык позволяет описывать произвольные бинарные форматы (сетевые пакеты, архивы, контейнерные форматы, файловые системы, форматы изображений, видео и т.д.) в декларативном виде. Полученное описание с помощью компилятора ksc можно:

  • Транслировать в готовый парсер на любом из 8 поддерживаемых целевых языков программирования (C++, C#, Java, JavaScript, Perl, PHP, Python, Ruby),
  • Визуально исследовать с помощью предлагаемой IDE любой файл в описанном формате: 0_1490278111.jpg
  • Представить в виде наглядной диаграммы 0_1490278085.png

В новой версии языка доступны:

  • Импорт .ksy-файлов друг в друга для создания масштабных многофайловых проектов — см. «meta/import» — в том числе с обращением к атрибутам типов из других файлов. Используемый для этого ранее механизм opaque типов отключен по умолчанию (можно включить опцией »--opaque-types»).
  • Структуры неопределенной длины, терминируемые байтом (ранее такое поддерживалось только для строк) — см. «terminator», «include», «consume».
  • «pad-right» для более удобной обработки структур с паддингом справа (например, строк, помещенных в область фиксированного размера и дополненных справа нулями или пробелами)
  • Гибкое управление отношением parent-child: с помощью «parent» можно форсировать родителя для дочернего объекта, отличного от текущего объекта по умолчанию
  • Вычислимые instances теперь могут использовать »_parent»
  • Новый атрибут «doc-ref» в типах и атрибутах может использоваться для представления ссылок на внешнюю документацию (удобно, если описание формата соответствует какому-то формальному документу)
  • Процесс компиляции четко разделен на 3 фазы: парсинг YAML, прекомпиляция (единая для всех целевых языков) и компиляция (в конкретный целевой язык); такое решение позволило унифицировать обработку ошибок и значительно упростить сами компиляторы.
  • Существенно переработан механизм определения ошибок: теперь все рапортуемые компилятором ошибки должны содержать четкое указание на место проявления ошибки; добавлено более 50 тестов с неверными .ksy-файлами специально для тестирования этого сообщений об ошибках.
  • Генерируемый код теперь содержит проверки на соответствие версии компилятора и runtime-библиотеки.
  • Переработана система логирования поведения компилятора (»--verbose»): теперь можно гибко включать логирование по отдельным подсистемам.
  • Новые возможности языка выражений: полноценная поддержка строк с двойными кавычками (с escape characters), type casting, методы для работы с массивами и различные преобразования типов.

Ввиду большого количества внутренних изменений, существенно изменен API runtime-библиотеки: код, сгенерированный ksc 0.7, будет работать только с runtime соответствующей версии. Благодаря введению механизма импорта, начаты работы по созданию библиотеки часто используемых структур данных и форматов. С версией 0.7 впервые эта библиотека поставляется в комплекте дистрибутива и на момент выпуска составляет 60 описаний.

© OpenNet