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

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

     13.2 Комбинированный набор объектов кодирования и его применение

13.2.1 Комбинированный набор объектов кодирования формируется из продукции "CombinedEncodings" (см. 13.1.3) следующим образом.

13.2.2 Если не имеется "CompletionClause", то "PrimaryEncodings" формирует комбинированный набор объектов кодирования.

13.2.3 В остальных случаях:

a) все объекты кодирования из "PrimaryEncodings" помещаются в комбинированный набор объектов кодирования, а затем

b) каждый объект кодирования из "SecondaryEncodings" добавляется в комбинированный набор объектов кодирования, если, и только если, в этом комбинированном наборе объектов кодирования уже нет объекта кодирования, который имеет тот же класс кодирования (см. 17.1.7 и 9.23.2).

13.2.4 После этого схематического конструирования начинается кодирование с именем "encodingclassreference" структур кодирования, указанных в приложении кодирования (см. 13.1.2 и 17.5).

13.2.5 Когда в ELM имеется несколько приложений кодирования, правила из 12.2 гарантируют, что применения не будут перекрываться. Они обрабатываются независимо. Аналогично приложения кодирований к структурам кодирования в модулях EDM (определяемые в 13.2.10) всегда не перекрываются. В последующих подразделах приведены правила применения к одиночной структуре кодирования.

13.2.6 Объекты кодирования из комбинированного набора объектов кодирования применяются в точке приложения. Точкой приложения является первоначально "encodingclassreference" для генерируемой структуры кодирования (когда применение происходит в ELM, как определено в 13.1.2) или компонент структуры кодирования (когда применение происходит в EDM, как определено в 17.5).

13.2.7 Любой класс кодирования в категориях "альтернативы", "конкатенация" и "повторение" (см. 16.1.8, 16.1.9 и 16.1.10) является конструктором кодирования.

13.2.8 Термин "компонент" в последующем тексте относится к любым таким элементам:

a) альтернативы конструктора, относящегося к категории "альтернативы";

b) поле, следующее за конструктором, относящимся к категории "повторение";

c) компоненты конструктора, относящегося к категории "конкатенация";

d) вложенный тип (тип, указанный в ограничении содержимого);

e) тип, выбранный (в экземпляре связи) для использования с классом в категории "открытый тип".

13.2.9 Точка приложения на последующих стадиях этих процедур может быть любым из следующих элементов:

a) имя класса кодирования. Это полностью подходит для кодирования с использованием спецификации в объекте кодирования того же класса (см. 17.1.7);

b) конструктор кодирования (см. 16.2.12). Процедуры конструирования могут быть определены спецификацией, содержащейся в объекте кодирования с классом конструктора кодирования, но этот объект кодирования не определяет кодирования этих компонентов. Спецификация применяемого объекта кодирования может потребовать, чтобы один или несколько компонентов конструктора были заменены другими структурами (параметризованными), перед тем как точка приложения перейдет к компонентам;

c) класс в категории "цепочка битов" или "цепочка октетов", который имеет некоторый вложенный тип в качестве признака, связанного со значениями [см. перечисление d) 11.3.4.3]. Кодирование вложенного типа зависит от того, присутствует ли ENCODED BY, и от спецификации применяемого объекта кодирования (см. 22.11);

d) класс в категории "открытый тип". Кодирование компонента открытого типа зависит от того, присутствует ли ENCODED WITH, и от спецификации применяемого объекта кодирования (см. 23.10.2);

e) компонент, который является классом кодирования (перед которым, возможно, имеются один или несколько классов в категории "тег"), за которым следует класс кодирования в категорию "факультативные возможности". Процедуры и кодирования для указания наличия или отсутствия определяются спецификацией, содержащейся в объекте кодирования классов в категории "факультативные возможности". Этот объект кодирования может также потребовать замены класса кодирования (вместе со всеми предшествующими ему классами в категории "тег") на структуру замены (параметризованную), перед тем как этот класс кодировать. Затем точка приложения переходит к первому классу в категории "тег" (если она имеется) или к компоненту, или к его заменителю;

f) класс кодирования, перед которым имеется класс кодирования в категории "тег". Номер тега, связанный с классом в категории "тег", кодируется с помощью спецификации в объекте кодирования с классом в категории "тег", а точка приложения переходит затем к тегированному классу;

g) любой другой предопределенный класс кодирования. Это полностью подходит для кодирования с использованием спецификации, содержащейся в объекте кодирования этого класса.

13.2.10 Кодирование продолжается следующим образом.

13.2.10.1 Если комбинированный набор объектов кодирования содержит объект кодирования того же класса (см. 17.1.7), что и текущая точка приложения, то применяется этот объект кодирования. Это применение может вызвать замену одного или нескольких компонентов с классом, к которому это кодирование применяется. Если же комбинированный набор объектов кодирования не содержит такого объекта кодирования, то либо:

а) класс кодирования в текущей точке приложения является ссылкой на другой класс кодирования; в этом случае ссылка на него убирается, а процедуры из 13.2.10 применяются рекурсивно, либо