Статус документа
Статус документа

ГОСТ Р ИСО/МЭК 8825-3-2016 Информационная технология (ИТ). Правила кодирования АСН.1. Часть 3. Спецификация нотации контроля кодирования (ECN)

     9.6 Определение новых классов кодирования

9.6.1 Те, кто осведомлен об АСН.1, знают, что присвоение типа может использоваться для создания новых имен (новых типов), например, из типов INTEGER и BOOLEAN. Новые имена определяют типы, которые будут теми же INTEGER или BOOLEAN, но несут другую семантику. Это понятие расширено в ECN, чтобы позволить создание (в присвоении класса - см. 16.1.1) новых имен (новых классов) для конструкторов, таких как #SEQUENCE. Новые имена определяют классы, которые выполняют такие же функции при структурировании кодовых последовательностей (например, при конкатенации), но должны иметь другие объекты кодирования, применяемые к ним. Новое имя класса, присвоенное некоторому старому классу, сохраняет определенные характеристики этого старого класса. Итак, присвоение, например, "#My-Sequence ::= #SEQUENCE" создает новое имя класса #My-Sequence, которое все еще является некоторым классом кодирования, относящимся к конкатенации компонентов. Мы говорим, что такие классы кодирования имеют одну и ту же категорию.

9.6.2 Если новый класс кодирования создан из существующего класса кодирования, то объекты кодирования как старого, так и нового классов кодирования могут появляться в одном наборе объектов кодирования.

9.6.3 Все предопределенные классы кодирования получаются от одного класса из небольшого числа простейших классов кодирования. Поэтому #SEQUENCE и #SET оба получены от класса #CONCATENATION, классы #INTEGER и #ENUMERATED получены от класса #INT, а классы для различных типов АСН.1 "цепочка знаков" все получены от класса #CHARS. Структура кодирования (например, неявно генерируемая из некоторого типа АСН.1) может содержать смесь разных классов, которые все получены из одного и того же простейшего класса и которые позволяют разные кодирования, применяемые, например, к #SEQUENCE и #SET.

9.6.4 Часто удобно вложить классы кодирования в категории, основанные на простейшем классе, из которого они получены. Поэтому мы говорим, что #INTEGER, #ENUMERATED и #INT (и любой класс, полученный из них в операторе присвоения класса, таком как "#My-int ::= #INT") находятся в категории "целочисленная". Имеются также группы категорий, которые содержат весьма различные классы, имеющие некоторые одинаковые характеристики. Поэтому любой класс, который может иметь абстрактные значения, прямо связанные с ним, и который, следовательно, вырабатывает биты при кодировании, будет находиться, можно сказать, в группе категорий "битовое поле". Поэтому все классы, которые находятся в категории "целочисленная", или "булева", или "цепочка знаков", относятся к группе категорий "битовое поле". Классы, которые ответственны за кодирования с группированием или повторением (например, классы в категории "альтернативы" или "повторение"), относятся к группе категорий "конструктор кодирования". Имеются также два класса, чьи объекты кодирования определяют процедуры, не относящиеся прямо к конструированию кодирования (#TRANSFORM и #OUTER): они считаются находящимися в группе категорий "процедура кодирования". Структуры кодирования определяются с помощью классов в группе категорий "битовое поле", которые комбинируются с классами из группы категорий "конструктор кодирования" вместе с классами из категорий "факультативные возможности" (представляют процедуры кодирования для разрешенных факультативных возможностей) и "тег" (представляют кодирование тегов). Все такие классы находятся в категории "структура кодирования", а также в группе категорий "битовое поле".

9.6.5 Для простейших классов категория присваивается прямо. Для классов, созданных в операторе присвоения класса кодирования, категория определяется с помощью нотации справа от символа "::=". Если эта нотация является определением структуры кодирования, то класс будет относиться как к категории "структура кодирования", так и к группе категорий "битовое поле". Если эта нотация является справочным именем простого класса, то категория нового класса будет такой же, как категория присвоенного класса.

9.6.6 Категориями класса кодирования (см. 16.1.3) являются:

- категория "альтернативы" (alternatives) (классы, которые получены путем присвоения класса из #ALTERNATIVES);


- категория "конкатенация" (concatenation) (классы, которые получены путем присвоения класса из #CONCATENATION);


- категория "повторение" (repetition) (классы, которые получены путем присвоения класса из #REPETITION);


- категория "факультативные возможности (опции)" (optionality) (классы, которые получены путем присвоения класса из #OPTIONAL);


- категория "тег" (tag) (классы, которые получены путем присвоения класса из #TAG);


- категории "булева" (boolean), "цепочка битов" (bitstring), "цепочка знаков" (characterstring), "целочисленная" (integer), "вырожденная" (null), "идентификатор объекта" (objectidentifier), "цепочка октетов" (octetstring), "открытый тип" (opentype), "pad" и "действительное число" (real) (категории для классов, которые получаются из соответствующих простейших классов);

- категория "структура кодирования" (encoding structure) (классы, генерируемые из определений типов АСН.1 или с помощью явного определения структуры кодирования).

9.6.7 Определены следующие группы категорий:

- "битовое поле" (bit-field) (классы, которые соответствуют реальным полям при кодировании, таким как поля в категории "целочисленная" или "булева", вместе с любым классом в категории "структура кодирования"). Классы в этой группе категорий называются также классами "битовое поле";

- "конструктор кодирования" (encoding constructor) (классы, которые находятся в категориях "альтернативы", "конкатенация" или "повторение"). Классы в этой группе категорий называются также классами "конструктор кодирования";

- "процедура кодирования" (encoding procedure) (классы, которые прямо не связаны с конструкторами АСН.1 и которым не могут быть присвоены новые имена - #OUTER, #TRANSFORM, #CONDITIONAL-INT, #CONDITIONAL-REPETITION). Классы в этой группе категорий называются также классами "процедуры кодирования".