Ссылка на файл Kaitai Struct (ksy) во внешнем файле ksy в Kaitai Struct - PullRequest
1 голос
/ 07 февраля 2020

Я пытаюсь добиться структурирования файлов в Kaitai Struct, это означает, что мне нужно создать файл ksy, на который может ссылаться другой файл ksy, поэтому, когда я компилирую на свой целевой язык (java в моем случае), java код будет оптимизирован и будет повторно использовать обычно созданные файлы KSY, а не создавать избыточный сгенерированный код java.

Я попытался имитировать c "Ссылки на перечисления во внешнем файле в Kaitai Struct", но он не работал .

Я начал изучать «импорт», что означает импорт файла KSY в файл KRE извне, я объясню в общих чертах, что я пытался сделать и достичь:

  1. Я создал ksy для data_types (настраиваемые типы данных), он не ссылается ни на что, только мета-раздел с идентификатором и затем типами, и я начал перечислять все свои настраиваемые типы данных (datatypeone, datatypetwo ...)
  2. Я создал ksy для типов машин, у каждого типа есть «seq» полей, каждое поле относится к одному из вышеупомянутых типов данных, проблема здесь в machineType.ksy, я добавляю dataType.ksy в качестве импорта, я не совсем уверен, каков синтаксис для этого, структурный компилятор Kaitai в Webide постоянно говорит мне, что настраиваемые типы данных не определены, например, datatypeone не определен.

Существуют ли какие-либо ограничения на количество файлов, на которые нужно сослаться, например, я могу ссылаться на файл a из файла b, а ссылочный файл b - из файла c, а ссылочный файл c - из файла d, означает, что файл d имеет «импорт» c "и файл c имеют« импорт b »и т. д.

1 Ответ

0 голосов
/ 07 февраля 2020

На этот вопрос нет однозначного ответа, это зависит от того, как вы хотите структурировать свой проект. Возможны следующие варианты:

  • Каждый файл .ksy имеет тип . Это означает, что вместо помещения datatypeone, datatypetwo, et c в один файл в качестве типов вложенности второго уровня (перечисленных в types:), вы можете просто поместить datatypeone в datatypeone.ksy, datatypetwo в datatypetwo.ksy, et c и импортируйте их отдельно, где это применимо.

  • Вы можете go включить свою идею, в этом случае правильный синтаксис для импорта:

    meta:
      id: machine_type
      imports:
        - datatype # refers to datatype.ksy
    seq:
      - id: foo
        type: datatype::datatypeone
    
  • Подумайте, почему вы действительно хотите разделить вещи на несколько файлов? Например, размещение всего в одном файле .ksy также является опцией, и это решает проблему дублирования кода.

Есть много других веских причин держать их отдельно, но учтите, что Идея Kaitai Struct иметь несколько файлов не такая же, как для C ++ или Java. Учитывая, что все записи в «файле KSY» неявно совместно используют один и тот же _root, разделение границ файла должно оцениваться по этому соединению, а не по какому-либо другому правилу (например, 1 класс = 1 файл, как в Java, или 1 файл = 1 единица компиляции, как в C ++).

Существуют ли какие-либо ограничения на количество файлов, на которые нужно ссылаться, например, я могу ссылаться на файл a из файла b и ссылочный файл b из файла c и справочный файл c из файла d означает, что файл d имеет «импорт c», а файл c имеет «импорт b» и т. д.

Нет такого ограничения (за исключением естественных ограничений, очевидно - то есть размер вашей памяти, памяти, выделенной для компилятора, вашего дискового пространства, ограничений вашей файловой системы и т. д. c).

...