ГОСТ Р И С 0 10303-11 — 2009
9.1 Объявление типа
Объявление типа создает определенный типданных (см. 8.3.2) и задает идентификатор для ссылки
на данный тип. В частности, имя определенного типа данных объявляется как type_id. Представлением
данного типа данных является underlying_type. Областьопределения определенного типаданных совпа
дает с областью определения базисного типа undorlying_type, но может бытьдополнительно ограничена
конструкцией where_clause (при ее наличии). Определенный тип данных является конкретизацией базис
ного типа данных и. следовательно, совместимым с базисным типом. Исключением являются конструкци
онные типы данных, когда определенный тип данных используется для задания имени конструкционного
типа данных, и фактически не является конкретизацией конструкционного типа данныхдаже вслучае, если
выбираемый типданных SELECT ограничен правилом WHERE.
П р и м е ч а н и е — Несколько определенных типов данных могут быть связаны с одним и тем же
представлением. Имена могут помочь пользователю в понимании назначения (или контекста) применения
базисного типа данных underlying_type.
Синтаксис:
327 type_decl = TYPE type_id ’= ’ undertyingjype ’;’[where_clause] END_TYPE
332 underlyingjype = concreteJypes | constructedjypes.
Правило: результатом объявлений типа TYPE не должны быть циклические определения типа.
Пример — Следующее объявление задает определенный тип данных с именем person_name и
базовым представлением STRING. Определенный тип person_name после данного объявления
доступен для использования в качестве представления атрибутов, локальных переменных и
формальных параметров. Это придает ему большую осмысленность, чем простое использование
типа STRING.
TYPE personname = STRING;
END TYPE;
Правила области определения (условие WHERE).
Правила области определения устанавливают ограничения для области определения определен
ного типа данных. Область определения определенного типа данных является областью определения
его базисного представления, ограниченного правилом (или правилами) области определения. Прави
ла области определения указываются после ключевого слова WHERE.
Синтаксис:
338where_clause = WHEREdomain_rule(domainrule}.
Для каждого объекта domain_rule может быть задана метка правила.
П р и м е ч а н и е — Если метки правил заданы, то они могут использоваться в метках комментария
(см. 7.1.6.3) или для идентификации правил в реализациях, например в документации, сообщениях об ошибках
и спецификациях применения. Задание меток правил для указанных целей является желательным.
Правила и ограничения:
a) Результатом оценки каждого правила области определения должно быть логическое (TRUE. FALSE
или UNKNOWN) или неопределенное (?) значение.
b
) Ключевое слово SELF (см. 14.5) должно присутствовать в каждом правиле области определения,
по крайней мере, один раз. Правило области определения должно оцениваться для конкретного значения
из области определения базисного типа путем подстановкиданного значения вместо каждого ключевого
слова SELF, присутствующего в правиле.
c) Правило области определения должно быть применено, если оценкой выражения является TRUE;
правило должно быть отклонено, если оценкой выражения является FALSE; правило не должно быть ни
применено, ни отклонено, если оценкой выражения является UNKNOWN или неопределенное (?)
значение.
d) Область определения определенного типа данных состоит из всех значений области определения
базисного типа, не нарушающих ни одного правила области определения.
e) Метки правил области определения должны быть уникальными в рамках данного объявления
типа TYPE.
Пример — Может быть создан определенный тип данных, ограничивающий базисный целочис
ленный тип данных только положительными целыми числами.
28