Spec-Zone.ru › Ada 2022
Руководство по Ada (Ada 2022)

4.1.4 Атрибуты

Атрибут — это характеристика сущности, которую можно запросить с помощью ссылка_на_атрибут или ссылка_на_атрибут_диапазона.

Синтаксис

ссылка_на_атрибут ::=
префикс'имя_атрибута
| ссылка_на_атрибут_с_сокращением
имя_атрибута ::=
идентификатор[(статическое_выражение)]
| Access | Delta | Digits | Mod
ссылка_на_атрибут_диапазона ::= префикс'имя_атрибута_диапазона
имя_атрибута_диапазона ::= Range[(статическое_выражение)]

Правила разрешения имен

В ссылке_на_атрибут, которая не является ссылкой_на_атрибут_с_сокращением, если имя_атрибута относится к атрибуту, определенному для (по крайней мере некоторых) объектов типа доступа, то префикс никогда не интерпретируется как явное_разъяснение; в противном случае (и для всех ссылок_на_атрибут_диапазона и ссылок_на_атрибут_с_сокращением), если есть префикс и тип имени внутри префикса является типом доступа, то префикс интерпретируется как явное_разъяснение. Аналогично, если имя_атрибута относится к атрибуту, определенному для (по крайней мере некоторых) функций, то префикс никогда не интерпретируется как безадресный вызов_функции; в противном случае (и для всех ссылок_на_атрибут_диапазона и ссылок_на_атрибут_с_сокращением), если есть префикс и префикс состоит из имени, обозначающего функцию, он интерпретируется как безадресный вызов_функции.
Выражение, если оно есть, в имени_атрибута или имени_атрибута_диапазона должно быть любого целочисленного типа.

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

Выражение, если оно есть, в имени_атрибута или имени_атрибута_диапазона должно быть статическим.

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

ссылка_на_атрибут обозначает значение, объект, подпрограмму или какой-либо другой вид программной сущности. Если тип ссылка_на_атрибут, обозначающий значение или объект, является скалярным, то его номинальный подтип — это базовый подтип типа; если его тип является помеченным, то его номинальный подтип — первый подтип типа; в противном случае его номинальный подтип — подтип типа без каких-либо ограничений, исключения_нуля или предиката. Аналогично, если ссылка_на_атрибут обозначает функцию, то, если её тип результата скалярный, подтип результата — базовый подтип типа; если тип результата помеченный, подтип результата — первый подтип типа; в противном случае подтип результата — подтип типа без каких-либо ограничений, исключения_нуля или предиката.
Ссылка ссылка_на_атрибут_диапазона X'Range(N) эквивалентна диапазону X'First(N) .. X'Last(N), за исключением того, что префикс вычисляется только один раз. Аналогично, X'Range эквивалентен X'First .. X'Last, за исключением того, что префикс вычисляется только один раз.

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

Вычисление ссылка_на_атрибут_диапазона или ссылка_на_атрибут, которая не является ссылкой_на_атрибут_с_сокращением, состоит из вычисления префикса. Вычисление ссылка_на_атрибут_с_сокращением определяется в 4.5.10.

Разрешения для реализации

Реализация может предоставлять определённые реализацией атрибуты; идентификатор такого атрибута, определённого реализацией, должен отличаться от атрибутов, определённых языком.
Реализация может расширить определение языкового атрибута, приняв его использование, которое в противном случае было бы незаконным в следующих случаях:
  • для обеспечения совместимости с предыдущим изданием данного Руководства; или
  • в случае языкового атрибута, префикс которого, согласно документу, должен быть типом с плавающей запятой, реализация может принять ссылка_на_атрибут с префиксом, являющимся типом с фиксированной запятой; семантика такой ссылка_на_атрибут определяется реализацией.
ПРИМЕЧАНИЕ 1 Атрибуты определены в данном документе и суммированы в К.2.
ПРИМЕЧАНИЕ 2 Согласно общим правилам, нет ожидаемого типа или профиля для имени в префикс ссылка_на_атрибут (или ссылка_на_атрибут_диапазона), что означает, что контекст не может быть использован для разрешения имени. Однако, согласно правилам в 3.10.2 для случая атрибута Access, ожидаемый тип для ссылка_на_атрибут будет единственным типом доступа, и разрешение имени может использовать указанный тип или профиль этого типа доступа.

Примеры

Примеры атрибутов:
Color'First -- минимальное значение перечисления Color (см. 3.5.1)
Rainbow'Base'First -- то же, что и Color'First (см. 3.5.1)
Real'Digits -- точность типа Real (см. 3.5.7)
Board'Last(2) -- верхняя граница второго измерения Board (см. 3.6.1)
Board'Range(1) -- диапазон индексов первого измерения Board (см. 3.6.1)
Pool(K)'Terminated -- True, если задача Pool(K) завершена (см. 9.1)
Date'Size -- количество битов для записей типа Date (см. 3.8)
Message'Address -- адрес переменной записи Message
-- (см. 3.7.1)


Spec-Zone.ru

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