Spec-Zone.ru › Ada 2022
Справочник по Ada (Ada 2022)

3.5.1 Типы перечисления

Определение enumeration_type_definition задаёт тип перечисления.

Синтаксис

enumeration_type_definition ::=
(enumeration_literal_specification {, enumeration_literal_specification})
enumeration_literal_specification ::=
defining_identifier | defining_character_literal
defining_character_literal ::= character_literal

Правила легальности

Идентификаторы defining_identifier в верхнем регистре и defining_character_literal в определении enumeration_type_definition должны быть различными.

Статическая семантика

Каждое enumeration_literal_specification — это явное объявление соответствующей литералы перечисления: оно объявляет безаргументную функцию, имя которой — defining_identifier или defining_character_literal, а подтип результата — базовый подтип типа перечисления.
Каждая литерла перечисления соответствует уникальному значению типа перечисления и уникальному номеру позиции. Номер позиции значения первой перечисленных литерл перечисления равен нулю; номер позиции значения каждой последующей литералы перечисления на единицу больше, чем у предшествующей в списке.
Предопределённые отношения порядка между значениями типа перечисления следуют порядку соответствующих номеров позиций.
Если тот же defining_identifier или defining_character_literal указан более чем в одном enumeration_type_definition, соответствующие литералы перечисления считаются перегруженными. В любом месте программы, где встречается перегруженная литерла перечисления, тип этой литералы должен быть однозначно определяемым из контекста (см. 8.6).

Динамическая семантика

Выполнение enumeration_type_definition создаёт тип перечисления и его первый подтип, который ограничен базовым диапазоном типа.
При вызове безаргументная функция, связанная с литералой перечисления, возвращает соответствующее значение типа перечисления.
ПРИМЕЧАНИЕ Если литерла перечисления встречается в контексте, который не определяет тип литералы, то квалификация именем типа перечисления — один из способов разрешения неоднозначности (см. 4.7).

Примеры

Примеры типов и подтипов перечисления:
type Day is (Mon, Tue, Wed, Thu, Fri, Sat, Sun);
type Month_Name is (January, February, March, April, May, June, July,
August, September, October, November, December);
type Suit is (Clubs, Diamonds, Hearts, Spades);
type Gender is (M, F);
type Level is (Low, Medium, Urgent);
type Color is (White, Red, Yellow, Green, Blue, Brown, Black);
type Light is (Red, Amber, Green); -- Red и Green перегружены
type Hexa is ('A', 'B', 'C', 'D', 'E', 'F');
type Mixed is ('A', 'B', '*', B, None, '?', '%');
subtype Weekday is Day range Mon .. Fri;
subtype Major is Suit range Hearts .. Spades;
subtype Rainbow is Color range Red .. Blue;
-- цвет Красный, а не свет


Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API