Часть XIII13.6. МакронотацияВ ASN.1 предусмотрен способ, с помощью которого пользователь ASN.1 может определить новую систему обозначений, посредством которой он может строить те же типы данных, что и в ASN.1, ссылаться на них, а также задавать значения этих типов. Предположим, что желательно иметь обозначение для определения типа следующего вида: PAIR TYPEX=.... TYPEY=...., допускающие запись соответствующего значения в виде (X=----, Y=----), где `....` и `----` означают соответственно любой тип ASN.1 и соответствующее значение. Такие макрообозначения типа могут быть использованы для определения типов и значений, как показано ниже: T1 ::= PAIR TYPEX=INTEGER TYPEY=BOOLEAN
T2 ::= PAIR TYPEX=VisibleString TYPEY=T1 Тогда значение типа T2 может иметь вид: (X="Name", Y=(X=4, Y=FALSE)) Для обеспечения этих обозначений, которые могут рассматриваться как расширение базовой нотации ASN.1, может быть использовано следующее макроопределение: PAIR MACRO ::= BEGIN TYPE NOTATION ::= "TYPEX" "=" type (Local-type-1) --Здесь ожидается описание любого типа ASN.1, --которое будет присвоено --переменной Local-type-1 "TYPEY" "=" type (Local-type-2) --Здесь ожидается описание любого типа ASN.1, --которое будет присвоено переменной --Local-type-2
VALUE NOTATION ::= "(" "X" "=" value (Local-value-1 Local-type-1) --здесь ожидается описание значения типа, --определяемого переменной Local-type-1, --которое будет присвоено переменной --Local-value-1 "," "Y" "=" value (Local-value-2 Local-type-2) --здесь ожидается описание значения типа, --определяемого переменной Local-type-2, --которое будет присвоено переменной --Local-value-2 {Local-value-1, Local-value-2}>
--Это "вложенное определение" возвращает окончательное
--значение, являющееся значением последовательности,
--состоящей из двух типов
")"
END
Таким образом, тело макроопределения состоит из нескольких частей.
Во-первых, это продукция типа "TYPE NOTATION", которая определяет новое обозначение типа. Последовательности символов, заключенные в двойные кавычки, - терминальные. Выражение type(Local-type) определяет, что в данном месте должна находится последовательность символов, образующих обозначение некоторого типа, которое будет присвоено локальной ссылке на тип Local-type.
Во-вторых, это продукция значения "VALUE NOTATION", которая определяет новое обозначение значения. Аналогично предыдущему, value(Local value Local type) определяет, что в данном месте должна находиться последовательность символов, образующих некоторое значение типа Local type, которая будет присвоена локальной ссылке на значение Local value.
Выражение в угловых скобках - так называемое "вложенное определение". В данном примере в нем описано локальное присвоение значения, являющегося значением последовательности, состоящей из двух типов.
|