ГОСТ Р ИСО/МЭК 8824-1-2001
ПРИЛОЖЕНИЕ F
(обязательное)
Правила совместимости типов и значений
Приложение должно использоваться главным образом разработчиками с целью гарантировал», что они
идентично интерпретируют язык. Оно приведено, чтобы четко специфицировать, что допустимо в ACH.I. а
что —нет. и позволить специфицировать точное значение, которое идентифицирует какое-либо имя ссылки
на значение, и точное множество значений, которое идентифицирует какое-либо имя ссылки на множество
типов или значений. Приложение нс устанавливает определения допустимых преобразований нотаций АСН.1
для каких-либо целей, отличных от укатанных выше.
F.I Необходимость понятия "отображение значений" (введение)
F.1.1 Рассмотрим следующие определения АСН.1:
А :: - INTEGER
В : : - |1| INTEGER
С :: = |2| INTEGER (0.. 6
___
)
D :: * |2) INTEGER (0.. 6 ,
___
7)
Е: : ~ INTEGER(7..20)
F : : ■= INTEGER (red (0). white (1). blue (2), green (3). purple (4)}
a A : :” 3
b В :: » 4
с C :: " 5
d D :: - 6
с E :: =• 7
f F : : ■*»green
F.I.2 Ясно, что ссылки на значения a. b, с. d, с, f могут быть использованы в нотациях значений,
управляемых А. В, С. D. Е, F соответственно. Например:
W :: - SEQUENCE {wlADEFAULT а)
х А : : ~ а
Y :: «■А <I .. а)
где все записи допустимы при определениях, данных в F.I.I. Однако если заменить А на В. С, D. Е млн F. то
будут ли получившиеся предложения допустимыми? Аналогично, если ссылку на значение а заменить ссылкой Ь,
с. d. с или Г, то будут ли получившиеся предложения допустимыми?
F.1.3 Более сложный вопрос возник бы в случае замены ссылки па тин явным текстом правой части
присваивания. Например:
f INTEGER {red (0), white (I), blue (2). green (3). purple (4)} : :green
W :: - SEQUENCE{
wl INTEGER {red (0), white (I), blue (2). green (3). purple (4))
DEFAULT f}
x INTEGER {red (0), white (1). blue (2). green (3). purple (4)| : : » f
Y ::INTEGER (red (0). white (1). blue (2). green (3). purple (4)} (1 .. f)
Допустимо ли это в ACH.I?
F.I.4 Некоторые из приведенных выше примеров таковы, что даже если и являются допустимыми (а
большинство из них допустимы —см. ниже), то пользователям не следовало бы писать аналогичные тексты,
как как они мало понятны и вводят в заблуждение. Однако часто встречается использование ссылки на значе ние
некоторого типа (нс обязательно INTEGER), как на значение по умолчании) для этого типа с применени ем
тегирования или образования подтипа в управляющем типе. Понятие "отображение значений* вводится для того,
чтобы обеспечить ясный и точный смысл определения, какие из приведенных выше конструкций допу стимы.
F.1.5 Р а с с м о т р и м о п р е д е л е н и я
С :: » |2| INTEGER (0.. 6
___
)
Е :: = INTEGER (7.. 20)
F : : ■= INTEGER {red (0). while (I), blue (2), green (3). purple (4)}
В каждом случае создается новый тип.
Для
F можно четко нлентифиикронать соответствие 1—1 между
значениями в этом типе и значениями в универсальном типе INTEGER. Для С и Е можно четко идентифици
ровать соответствие 1—1 между значениями в этих типах и подмножествами значений в универсальном тине
INTEGER. Это взаимоотношение называется отображением значений между значениями в двух типах. Болес
тою. так как значения в С. Е и F имеют отображения 1—1 в значения INTEGER, можно использовать эти
отображения для обеспечения отображений между значениями самих С. Е и F. Для С и F это показано на
рисунке F.I.
88