Перейти в оглавлению раздела

Часть XIII

13.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.

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



Предыдущая глава Оглавление Следующая глава