Справочник по Ada 2012
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
[aspect_specification];
| task_type_declaration
| protected_type_declaration
type defining_identifier [known_discriminant_part] is type_definition
[aspect_specification];
| 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, является именованным типом; такой тип имеет один или несколько именованных подтипов. Некоторые другие формы объявления также включают определения типов в качестве части объявления объекта. Определяемый таким объявлением тип является анонимным — у него нет именованных подтипов. Для целей пояснения этот международный стандарт иногда ссылается на анонимный тип с помощью псевдонима, написанного курсивом, и использует такие псевдонимы в местах, где синтаксис обычно требует identifier. Для именованного типа, первым подтипом которого является 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; его тип является анонимным — у него нет именованных подтипов.