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

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

     15.1 Явно генерируемые и экспортируемые структуры

15.1.1 Продукцией "RenamesAndExports" является:

RenamesAndExports ::=

RENAMES

ExplicitGenerationList ";"

ExplicitGenerationList ::=

ExplicitGeneration

ExplicitGenerationList ?

ExplicitGeneration ::=

OptionalNameChanges

FROM GlobalModuleReference

OptionalNameChanges ::=

NameChanges | GENERATES


Примечание - Пример использования раздела переименований для создания явно генерируемых структур кодирования приведен в D.3.7.

15.1.2 Продукция "GlobalModuleReference" определена в ИСО/МЭК 8824-1, пункт 13.1; она должна указывать модуль АСН.1.

15.1.3 "RenamesAndExports" называется разделом переименований.

15.1.4 Каждый элемент "ExplicitGeneration" генерирует и экспортирует из этого модуля явно генерируемую структуру кодирования для каждой из неявно генерируемых структур кодирования модуля АСН.1, указанных в "GlobalModuleReference". Каждое поле явно генерируемой структуры кодирования имеет связанные с ним такие же значения, что и соответствующее поле неявно генерируемой структуры кодирования (той, которая связана с соответствующим полем типа АСН.1, из которого она была генерирована).

15.1.5 Если раздел переименований ссылается более чем на один модуль АСН.1 и в результате этих двух явно генерируемых структур получает одно и то же простое имя, то никакая структура не будет доступна для явного импорта в модуль ELM или EDM.

Примечание - Эти явно генерируемые структуры, тем не менее, существуют и, вероятно, будут неявно указываться другими явно генерируемыми структурами, которые экспортированы без ограничения.

15.1.6 Основная цель раздела переименований - это обеспечение доступности явно генерируемых структур для импорта в другие модули, в частности в ELM. Однако этот раздел делает эти структуры также доступными для ссылки внутри модуля EDM, за исключением случая, указанного в 15.1.7. Если простое имя допускает неоднозначность, то в этом модуле EDM, содержащем раздел переименований, как описывается в 15.1.9, должно использоваться полностью определенное имя.

Примечание - Неоднозначность может возникнуть либо из-за совпадения с именами предопределенных классов, либо из-за совпадения простых имен из структур, генерируемых из более чем одного модуля АСН.1, либо по обеим причинам.

15.1.7 Когда раздел переименований вырабатывает явно генерируемую структуру из неявно генерируемой структуры, эта неявно генерируемая структура не может импортироваться в этот модуль EDM с помощью раздела импортов, и эта неявно генерируемая структура будет недоступной в этом модуле EDM.

15.1.8 Эти явно генерируемые структуры кодирования имеют то же простое справочное имя, что и неявно генерируемая структура кодирования, из которой они были сформированы (но будут иметь другие классы). Если для явно генерируемой структуры кодирования требуется полностью определенное имя, то оно должно содержать "Moduleldentifier" модуля EDM, имеющего раздел переименований, как описывается в 15.1.9.

Примечание - Неявно генерируемые структуры кодирования, используемые в их генерировании, имеют то же самое простое справочное имя, но их полностью определенное имя содержит "Moduleldentifier" модуля АСН.1, в котором был определен соответствующий тип.

15.1.9 Если EDM вырабатывает явно генерируемые структуры кодирования из более чем одного модуля АСН.1, то возможно, что некоторые из этих структур будут иметь одинаковые простые имена классов кодирования. Если некоторые из этих структур указаны в теле этого EDM, то такой ссылкой должна быть "ExternalEncodingClassReference", содержащая "modulereference", использованную в качестве ссылки на модуль АСН.1 в компоненте "замены" модуля EDM.

15.1.10 Нотация "ExternalEncodingClassReference" не используется в разделе импортов, за исключением требования из 15.1.9.

15.1.11 Если имя, импортированное с помощью "ExternalEncodingClassRefererence", использовано в теле модуля, то может применяться простая "encodingclassreference", когда не требуется "Extern alEncodingClassReference" согласно 15.1.9.

15.1.12 Если "OptionalNameChanges" является GENERATES, то все явно генерируемые структуры кодирования будут теми же структурами, что и неявно генерируемые структуры кодирования, используемые при их генерации, за исключением случаев, определенных в 15.1.14.

Примечание - (Руководство) Если в модуле EDM имеются несколько структур с одинаковыми простыми справочными именами (эти имена возникли или из компонента импортов, или из компонента переименований, или из-за совпадений с предопределенными классами, или из-за любой комбинации этих причин), то используется полностью определенное имя, за исключением ссылок на предопределенный класс. Для неявно генерируемых структур полностью определенное имя всегда использует имя модуля АСН.1. Для структур, генерируемых компонентом переименований в модуле EDM, используется полностью определенное имя. Это полностью определенное имя в теле этого EDM всегда использует имя модуля АСН.1, указанное в компоненте переименований. Для структур, импортированных из другого модуля EDM, полностью определенное имя использует имя этого модуля EDM. Это всегда обеспечивает недвусмысленность, так как импортирование не разрешается, если модуль EDM генерирует несколько явно генерируемых структур с одним и тем же простым справочным именем.