Откройте актуальную версию документа прямо сейчас
Если вы являетесь пользователем интернет-версии системы ГАРАНТ, вы можете открыть этот документ прямо сейчас или запросить по Горячей линии в системе.
Приложение А
Обязательное
Макронотация
А.1 Введение
В АСН.1 предусмотрен способ, с помощью которого пользователь АСН.1 может определить новую систему обозначений, с использованием которой он может строить те же типы данных, что и в AСH.1, ссылаться на них, а также задавать значения этих типов Эта новая система обозначений определяется с помощью обозначения нотации АСН.1 "Макроопределение". "Макроопределение" одновременно определяет как обозначения для построения типов и осуществления ссылок на них, так и обозначения для записи значений (См. Е.3, содержащий пример использования макронотации).
С помощью "Макроопределения" пользователь АСН.1 определяет новые обозначения с помощью некоторого множества продукций, аналогично тому, как это делается в настоящем стандарте. Составитель макроопределения должен:
a) полностью определить синтаксис, который предполагается использовать, для определения всех типов, обеспечиваемых данным макроопределением, (это описание синтаксиса вызывается для синтаксического анализа каждый раз при появлении в обозначении типа АСН.1 имени макроопределения);
b) полностью определить синтаксис, который предполагается использовать для определения значений этих типов (это описание синтаксиса вызывается для синтаксического анализа каждый раз, когда ожидается значение типа, описанного с помощью макроопределения), и
c) определить в виде значений стандартных типов АСН.1 (произвольного уровня сложности) получающиеся в результате типы и значения для всех случаев использования макрообозначений для записи значений.
Конкретное использование синтаксиса, определенного с помощью макроопределения, может содержать обозначения типов и значений, заданных в обычной нотации АСН.1. Эти типы или значения (присутствующие в конкретном использовании макрообозначений) могут быть логически связаны в период выполнения синтаксического анализа с локальными ссылками, на тип или на значение с помощью соответствующих конструкций в макроопределении. Можно также встроить в макроопределение присвоение ссылкам обычных определений типов АСН.1. Описанные выше присвоения активизируются, когда соответствующая синтаксическая категория макроопределения сопоставляется с элементом (или элементами), входящими в использование новой нотации. Время их действия ограничено временем выполнения синтаксического анализа
При синтаксическом анализе значения, заданного с помощью макронотации, присвоения, выполненные при синтаксическом анализе типа, продолжают быть доступными. Синтаксический анализ обозначения типа считают логически предшествующим анализу соответствующих значений.
Каждое "Макроопределение" определяет систему обозначений (синтаксис) для определения типа и систему обозначений (синтаксис) для определения значений. Тип данных АСН.1, определенный с помощью макрообозначения типа, может зависеть (но необязательно зависит) от макрообозначения конкретного значения, к которому относится макрообозначение типа. В этом отношении использование макронотации типа сходно с использованием выборочного типа ("CHOICE") - тег типа в данном случае не определен. Поэтому в случаях зависимости типа от значения макронотация не может быть использована там, где требуется наличие известного тега, в этих случаях не может также применяться неявное задание тега.
Тип и значение, полученные в результате использования макронотации, определяются тем, какое значение (и каков его тип) присваивается (в результате последовательной обработки макроопределения типа, а затем макроопределения значения) локальной ссылке на значение, отмеченной в макроопределении ключевым словом VALUE.
А 2 Дополнение к набору знаков и множеству элементов АСН.1
В макронотации используют знаки# и >
Также используют элементы, описанные в последующих пунктах
А.2.1 Макроссылка
Имя элемента - макроссылка
"Макроссылка" должна состоять из последовательности знаков, удовлетворяющей требованиям, установленным для "СсылкиНаТип" в 8.2, с тем отличием, что все буквы должны быть прописными. Внутри одного модуля одна и та же последовательность знаков не должна использоваться одновременно и как ссылка на тип, и как макроссылка.
А.2.2 Ссылка на продукцию
Имя элемента - СсылкаНаПродукцию
"СсылкаНаПродукцию" должна состоять из последовательности знаков, удовлетворяющих требованиям, установленным для "СсылкиНаТип" в 8.2.
А.2.3 Локальная ссылка на тип
Имя элемента - ЛокальнаяСсылкаНаТип
"ЛокальнаяСсылкаНаТип" должна представлять собой последовательность знаков вида "СсылкаНаТип", определенного в 8.2. "ЛокальнаяСсылкаНаТип" используется в качестве идентификатора для типов, распознаваемых во время синтаксического анализа макрообозначения типа или значения.
А.2.4 Локальная ссылка на значение
Имя элемента - ЛокальнаяСсылкаНаЗначение
"ЛокальнаяСсылкаНаЗначение" должна представлять собой последовательность знаков вида "СсылкаНаЗначение", определенного в 8.2. "ЛокальнаяСсылкаНаТип" используется в качестве идентификатора для значений, распознаваемых во время синтаксического анализа макрообозначения типа или значения.
Примечание "ЛокальнаяСсылкаНаТип" должна начинаться с прописной буквы
А.2.5 Элемент разграничения вариантов
Имя элемента - ""
Этот элемент состоит из единственного знака
А.2.6 Элемент, обозначающий конец определения
Имя элемента - >
Этот элемент состоит из единственного знака >.
Примечание. Элемент <, обозначающий начало определений, определен в 8.13.
А.2.7. Синтаксический терминальный элемент
Имя элемента - а-строка
Элемент "а-строка" ("строка в кавычках") должен состоять из произвольного (возможно, равного нулю) количества знаков из знакового набора АСН.1 (см раздел 7), обрамленных кавычками . Знак представляется в "строке в кавычках" в виде пары знаков .
Примечание. Использование "строки в кавычках" ("а-строки") в макрообозначении задает появление в соответствующем месте анализируемого синтаксиса знаков, заключенных между кавычками ().
А.2.8 Элементы - ключевые слова синтаксических категорий
Имена элементов - |
"string" |
|
"identifier" |
|
"number" |
|
"empty" |
Элементы с приведенными выше именами должны состоять (в макроопределении) из последовательностей знаков, совпадающих с их именами, исключая кавычки (). Эти элементы используются в макроопределении для задания вхождения в использовании новой нотации последовательностей знаков определенного вида. Вид последовательностей знаков, соответствующих каждому из элементов, определяется в таблице А.1 посредством ссылки на раздел настоящего стандарта.
Примечание. В макронотации не поддерживается различие между идентификаторами и ссылками, отличающимся только типом первой буквы: строчная или прописная. Это обусловлено историческими причинами.
Таблица А.1 - Классы последовательностей, задаваемые элементами
Имя элемента |
Раздел, содержащий определение |
"string" |
произвольная последовательность знаков |
"identifier" |
8.3 - Идентификаторы |
"number" |
8.8 - Числа |
"empty" |
8.7 - Пустой элемент |
А.2.9 Дополнительные элементы - ключевые слова
Имена элементов - |
MACRO |
|
TYPE |
|
NOTATION |
|
VALUE |
|
value |
|
type |
Элементы с приведенными выше именами должны состоять из последовательностей знаков, совпадающих с их именами.
Элементы, определяемые в А.2.2-А.2.4, не должны совпадать с какой-либо последовательностью знаков из А.2.9, за исключением случаев, оговоренных ниже.
Ключевое слово "MACRO" должно использоваться для того, чтобы обозначить начало макроопределения. Ключевое слово "TYPE NOTATION" должно использоваться в качестве имени продукции, определяющей новые обозначения типа. Ключевое слово "VALUE NOTATION" должно использоваться в качестве имени продукции, определяющей новые обозначения значения. Ключевое слово "VALUE" должно использоваться в качестве "ЛокальнойСсылкиНаЗначение", которой присваивается получаемое в результате значение. Ключевое слово "value" должно использоваться для указания того, что в каждом применении новых обозначений в этом месте должно содержаться значение (записанное в обозначениях АСН.1) некоторого типа (задаваемого макроопределением). Ключевое слово "type" должно использоваться для указания того, что в каждом применении новых обозначений в этом месте должно содержаться обозначение вида "Тип" (в обозначениях АСН.1).
А.3 Обозначения для записи макроопределений
А.3.1 Макросредство должно быть определено с использованием обозначений вида "Макроопределение":
Макроопределение : : = |
|
||
|
макроссылка |
||
|
MACRO |
||
|
": : =" |
||
|
СодержаниеМакро |
||
СодержаниеМакро : : = |
|
||
|
BEGIN ТелоМакро END |
||
|
макроссылка |
||
|
ВнешняяМакроссылка |
||
ТелоМакро : : = |
|
||
|
ПродукцияТипа |
||
|
ПродукцияЗначения |
||
|
ВспомогательныеПродукции |
||
ПродукцияТипа : : = |
|
||
|
TYPE NOTATION |
||
|
": : =" |
||
|
СписокВариантовМакро |
||
ПродукцияЗначения : : = |
|
||
|
VALUE NOTATION |
||
|
": : =" |
||
|
СписокВариантовМакро |
||
ВспомогательныеПродукции : : = |
|
||
|
СписокПродукции |
||
|
empty |
||
СписокПродукций : : = |
|
||
|
Продукция |
||
|
СписокПродукций Продукция |
||
Продукция : : = |
|
||
|
СсылкаНаПродукцию |
||
|
": : =" |
||
|
СписокВариантовМакро |
||
ВнешняяМакроссылка : : = |
|
||
|
СсылкаНаМодуль.макроссылка |
Примечание. Предполагается дать возможность в макроопределении ссылаться на другие макроопределения. Вопрос о том, согласуется ли это с правилами настоящей нотации, подлежит дальнейшему изучению.
А.3.2 Если для конструкции "СодержаниеМакро" был выбран вариант "макроссылка", то модуль, в которой содержится данное макроопределение, должен либо
a) содержать другое макроопределение, либо
b) содержать это макроопределение среди своих "ВходныхСимволов".
А.3.3 Если для конструкции "СодержаниеМакро" был выбран вариант "ВнешняяМакроссылка", то модуль, заданный "СсылкойНаМодуль", должен содержать макроопределение, определяющее эту "макроссылку". Это макроопределение и является определением данной макроссылки.
А.3.4 Цепочка определений, могущая возникнуть в результате многократного применения правил А.3.2 и А.3.3, должна заканчиваться "Макроопределением" в котором используется вариант "BEGIN ТелоМакро END"; "ТелоМакро" этого макроопределения определяет обозначения типа и значения данного макросредства.
А.3.5 Каждая "СсылкаНаПродукцию", присутствующая в "ОпределенииСимвола" (см. А.3.9), должна присутствовать в точности один раз в качестве первого элемента некоторой "Продукции".
А.3.6 Каждый случай использования макрообозначения типа должен начинаться с последовательности знаков "Макроссылка", за которой следует одна из последовательностей знаков, удовлетворяющих продукции "TYPE NOTATION" после применения всех продукций, заданных в макроопределении.
А.3.7 Каждый случай использования макронотации для записи значения должен быть некоторой последовательностью знаков из множества, описанного продукцией "VALUE NOTATION" после применения всех продукций, заданных в макроопределении.
А.3.8 Множество последовательностей знаков, описываемое продукцией "ТУРЕ NOTATION" или VALUE NOTATION", определяется соответствующим "СпискомВариантовМакро", имеющим вид:
СписокВариантовМакро : : =
ВариантМакро
СписокВариантовМакро "" ВариантМакро
Множество последовательностей знаков, описываемое продукцией "СписокВариантовМакро", состоит из множества последовательностей знаков, описываемых продукциями "ВариантМакро", входящими в "СписокВариантовМакро".
А.3.9 Обозначения для записи последовательности "ВариантыМакро" в макроопределении определяются следующим образом:
ВариантМакро : : = СписокСимволов |
|
|
СписокСимволов : : = |
|
|
|
Символьный Элемент |
|
|
СписокСимволов Символьный Элемент |
|
Символьный Элемент : : = |
|
|
|
ОпределениеСимвола |
|
|
ВложенноеОпределение |
|
МакроТип : : = ЛокальнаяСсылкаНаТип |
|
|
|
Тип |
|
ОпределениеСимвола : : = |
|
|
|
"а-строка" |
|
|
СсылкаНаПродукцию |
|
|
"string" |
|
|
"identifier" |
|
|
"number" |
|
|
"empty" |
|
|
type |
|
|
type (ЛокальнаяСсылкаНаТип) |
|
|
value (МакроТип) |
|
|
value (ЛокальнаяСсылкаНаЗначение МакроТип) |
|
|
value (VALUE МакроТип) |
|
Примечание. В макроопределении выражение "МакроТип", определенное в этом же макроопределении, может присутствовать в любом месте, где в соответствии с правилами нотации АСН.1 требуется выражение "Тип".
Множество последовательностей знаков, описывамое продукцией "ВариантМакро", образуется последовательным соединением любой из строк знаков" описываемой первой последовательностью "ОпределениеСимвола" с любой из строк знаков, описываемой второй последовательностью "ОпределениеСимвола" и так далее, вплоть до последнего "ОпределенияСимвола" из "СпискаСимволов".
Примечание. "ВложенныеОпределения", если они присутствуют, не играют явной роли при определении множества допустимых строк.
А.3.10 Элемент ("а-строка") описывает последовательности знаков, составляющие "а-строку", без обрамляющей пары кавычек ().
А.3.11 Элемент "СсылкаНаПродукцию" описывает произвольную последовательность знаков, задаваемых "Продукцией", идентифицируемой данной ссылкой.
А.3.12 Последовательности знаков, описываемые следующими четырьмя вариантами продукции "ОпределениеСимвола", задаются таблицей А.1.
Примечание. Последовательности знаков, описываемые вариантом "string", должны заканчиваться в использовании макрообозначения появлением последовательности, описываемой очередным выражением "ОпределениеСимвола" в "СпискеСимволов".
А.3.13 Вариант "type" описывает последовательности знаков, образующие обозначение вида "Тип", соответствующее определению в 12.1.
Примечание. Выражение "ОпределенныйТип" в определении из 12.1 может в данном случае содержать "ЛокальнуюСсылкуНаТип", служащую для обозначения типа, определенного с помощью макроопределения.
А.3.14 Вариант "type (ЛокальнаяСсылкаНаТип)" описывает последовательности знаков, образующие выражение "Тип", соответствующее определению из 12.1, и кроме того присваивает этот тип "ЛокальнойСсылкеНаТип".
А.3.15 Вариант "value (МакроТип)" описывает последовательности знаков, образующие выражение "Значение", соответствующее определению из 12.7, того типа, который задан выражением "Макротип".
А.3.16 Выражение "value (ЛокальнаяСсылкаНаЗначение МакроТип)" описывает последовательности знаков, образующих выражение "Значение", соответствующее определению из 12.7, того типа, который задан выражением "МакроТип"; и кроме того присваивает этот тип "ЛокальнойСсылкеНаТип". Впоследствии той же "ЛокальнойСсылкеНаТип" может быть присвоен другой тип.
А.3.17 Вариант "value (VALUE МакроТип)" описывает последовательности знаков, образующих выражение "Значение", (соответствующее определению из 12.7) того типа, который задан выражением "МакроТип", но кроме того возвращает данное значение в качестве значения, заданного данным использованием макрообозначеннй. Тип возвращаемого значения задается выражением "МакроТип".
А.3.18 При синтаксическом анализе любого правильного использования макрообозначений должно осуществляться в точности одно присвоение значения выражению "VALUE" (описанному в А.3.17 или А.3.19).
А.3.19 Выражение "ВложенныеОпределения" определяется следующими продукциями:
ВложенноеОпределение : : =
< СписокВложенныхОпределений >
СписокВложенныхОпределений : : =
ВложенноеОпределение
СписокВложенныхОпределений
ВложенноеОпределение
ВложенноеОпределение : : =
ЛокальноеПрисвоениеТипа
ЛокальноеПрисвоениеЗначения
ЛокальноеПрисвоениеТипа : : =
ЛокальнаяСсылкаНаТип
": : ="
МакроТип
ЛокальноеПрисвоениеЗначения : =
ЛокальнаяСсылкаНаЗначение
МакроТип
": : = "
МакроЗначение
Макрозначение : : =
Значение
ЛокальнаяСсылкаНаЗначение
Присвоение "МакроТипа" "ЛокальнойСсылкеНаТип", а также "МакроЗначения" "ЛокальнойСсылкеНаЗначение" во "ВложенныхОпределениях" осуществляется при синтаксическом анализе использования макрообозначения при обработке "ВложенныхОпределений" и сохраняется до переопределения "ЛокальнойСсылкиНаТип" или "ЛокальнойСсылкиНаЗначение".
Примечания
1 Использование связанной "ЛокальнойСсылкиНаТип" или "ЛокальнойСсылкиНаЗначение" в другом месте того же варианта возможно только при определенных предположениях относительно алгоритма синтаксического разбора. Эти предположения должны быть описаны в комментарии. Например, использование "ЛокальнойСсылкиНаТип", текстуально следующей за "ВложеннымиОпределениями", возможно только при синтаксическом разборе слева направо.
2 "ЛокальнойСсылкеНаТип", заданной как "VALUE", может быть присвоено значение как с помощью конструкции "value (VALUE МакроТип)", так и с помощью вложенного определения. В обоих случаях присвоенное значение является возвращаемым значением, в соответствии с А.3.17.
А.4 Использование новой нотации
Обозначение типа (или значения), определенное с помощью макросредства, может применяться во всех случаях, когда в соответствии с правилами настоящего стандарта требуется использование обозначения "Тип" (или "Значение"), при условии, что выполнены следующие требования:
a) макросредство определено в том же модуле; либо
b) макросредство вводится в модуль посредством включения "макроссылки" в конструкцию "ВходныеСимволы" этого модуля.
Чтобы обеспечить возможность b), "макроссылка" может быть подставлена в качестве "Символа" в обозначениях 9.1.
Примечания.
1 Описываемое в этом приложении расширение нотации АСН.1 не используют в основном тексте настоящего стандарта.
2 Возможно построение модулей, содержащих последовательности присвоения типа и макроопределения, приводящих к сколь угодно сложному синтаксическому разбору значений, заданных с использованием ключевого слова DEFAULT.
Если вы являетесь пользователем интернет-версии системы ГАРАНТ, вы можете открыть этот документ прямо сейчас или запросить по Горячей линии в системе.