Справочник по Ada 2005
3.2.1 Объявления типов
Объявление type_declaration объявляет тип и его первый подтип.
Синтаксис
type_declaration ::= full_type_declaration
| incomplete_type_declaration
| private_type_declaration
| private_extension_declaration
| incomplete_type_declaration
| private_type_declaration
| private_extension_declaration
full_type_declaration ::=
type defining_identifier [known_discriminant_part] is type_definition;
| task_type_declaration
| protected_type_declaration
type defining_identifier [known_discriminant_part] is type_definition;
| task_type_declaration
| protected_type_declaration
type_definition ::=
enumeration_type_definition | integer_type_definition
| real_type_definition | array_type_definition
| record_type_definition | access_type_definition
| derived_type_definition | interface_type_definition
enumeration_type_definition | integer_type_definition
| real_type_definition | array_type_definition
| record_type_definition | access_type_definition
| derived_type_definition | interface_type_definition
Правила допустимости
Указанный тип не должен иметь подкомпонента, тип которого совпадает с данным типом.
Статическая семантика
Идентификатор defining_identifier объявления type_declaration обозначает первый подтип типа. Часть known_discriminant_part, если она есть, определяет дискриминанты типа (см. 3.7, «Дискриминанты»). Остальная часть объявления type_declaration определяет остальные характеристики (вида) типа.
Тип, определённый объявлением type_declaration, является именованным типом; такой тип имеет один или несколько именованных подтипов. Некоторые другие формы объявления также включают определения типов как часть объявления объекта. Определяемый таким образом тип является анонимным — он не имеет именованных подтипов. Для целей пояснения данный международный стандарт иногда ссылается на анонимный тип с помощью псевдонима, написанного курсивом, и использует такие псевдонимы в местах, где синтаксис обычно требует идентификатор. Для именованного типа, первым подтипом которого является T, данный международный стандарт иногда ссылается на тип T просто как «тип T».
Именованный тип, объявленный с помощью full_type_declaration, или анонимный тип, определяемый с помощью access_definition или как часть объявления объекта типа, называется полным типом. Объявление полного типа также объявляет полный вид типа. type_definition, task_definition, protected_definition или access_definition, которые определяют полный тип, называются полным определением типа. Типы, объявленные другими формами type_declaration, не являются отдельными типами; они представляют собой частичный или неполный вид некоторого полного типа.
Определение типа подразумевает объявление некоторых предопределённых операторов, которые работают над типом в соответствии с классами, к которым принадлежит тип, как указано в 4.5, «Операторы и вычисление выражений».
Предопределённые типы (например, типы Boolean, Wide_Character, Integer, root_integer и universal_integer) — это типы, определённые в предопределённом пакете библиотек Standard; этот пакет также включает (явные) объявления их предопределённых операторов. Пакет Standard описан в A.1.
Динамическая семантика
Выполнение full_type_declaration состоит из выполнения полного определения типа. Каждое выполнение полного определения типа создаёт отдельный тип и его первый подтип.
Примеры
Примеры определений типов:
(Белый, Красный, Жёлтый, Зелёный, Синий, Коричневый, Чёрный)
диапазон 1 .. 72
массив(1 .. 10) из Integer
диапазон 1 .. 72
массив(1 .. 10) из Integer
Примеры объявлений типов:
type Цвет is (Белый, Красный, Жёлтый, Зелёный, Синий, Коричневый, Чёрный);
type Столбец is диапазон 1 .. 72;
type Таблица is массив(1 .. 10) из Integer;
type Столбец is диапазон 1 .. 72;
type Таблица is массив(1 .. 10) из Integer;
ПРИМЕЧАНИЯ
3 Каждый из приведённых выше примеров объявляет именованный тип. Указанный идентификатор обозначает первый подтип типа. Другие именованные подтипы типа могут быть объявлены с помощью subtype_declaration (см. 3.2.2). Хотя имена напрямую не обозначают типы, фраза типа «тип Столбец» иногда используется в данном международном стандарте для обозначения типа Столбец, где Столбец обозначает первый подтип типа. Пример определения анонимного типа см. в объявлении массива Color_Table в 3.3.1; его тип является анонимным — у него нет именованных подтипов.