Справочник по Ada 2005
4.1 Имена
Имя может обозначать объявленные сущности, объявленные явно или неявно (см. 3.1). Имя также может обозначать объекты или подпрограммы, указанные значениями доступа; результаты преобразования_типа или вызова_функции; подкомпоненты и срезы объектов и значений; защищённые подпрограммы, отдельные записи, семейства записей и записи в семействах записей. Наконец, имя может обозначать атрибуты любого из вышеперечисленного.
Синтаксис
имя ::=
прямое_имя | явное_разъяснение
| индексированный_компонент | срез
| выбранный_компонент | ссылка_на_атрибут
| преобразование_типа | вызов_функции
| литерал_символа
прямое_имя | явное_разъяснение
| индексированный_компонент | срез
| выбранный_компонент | ссылка_на_атрибут
| преобразование_типа | вызов_функции
| литерал_символа
Определенные формы имени (индексированные_компоненты, выбранные_компоненты, срезы и ссылки_на_атрибуты) включают в себя префикс, который сам по себе является именем, обозначающим некоторую связанную сущность, или неявным_разъяснением значения доступа, указывающего на некоторую связанную сущность.
Правила разрешения имён
Статическая семантика
Если тип имени в разъяснении — это тип доступа к объекту T, то разъяснение обозначает представление объекта, а номинальный подтип представления — это указанный подтип T.
Если тип имени в разъяснении — это тип доступа к подпрограмме S, то разъяснение обозначает представление подпрограммы, а профиль представления — это указанный профиль S.
Динамическая семантика
Оценка имени определяет сущность, обозначаемую именем. Эта оценка не оказывает никакого другого влияния для имени, являющегося прямым_именем или литералом_символа.
Оценка имени, имеющего префикс, включает в себя оценку префикса. Оценка префикса состоит из оценки имени или неявного_разъяснения. Префикс обозначает сущность, обозначаемую именем или неявным_разъяснением.
Оценка разъяснения состоит из оценки имени и определения объекта или подпрограммы, указанного значением имени. Проводится проверка, что значение имени не является нулевым значением доступа. Если эта проверка завершается неудачно, генерируется исключение Constraint_Error. Разъяснение обозначает объект или подпрограмму, указанные значением имени.
Примеры
Примеры прямых имён:
Pi -- прямое имя числа (см. 3.3.2)
Limit -- прямое имя константы (см. 3.3.1)
Count -- прямое имя скалярной переменной (см. 3.3.1)
Board -- прямое имя массива переменной (см. 3.6.1)
Matrix -- прямое имя типа (см. 3.6)
Random -- прямое имя функции (см. 6.1)
Error -- прямое имя исключения (см. 11.1)
Limit -- прямое имя константы (см. 3.3.1)
Count -- прямое имя скалярной переменной (см. 3.3.1)
Board -- прямое имя массива переменной (см. 3.6.1)
Matrix -- прямое имя типа (см. 3.6)
Random -- прямое имя функции (см. 6.1)
Error -- прямое имя исключения (см. 11.1)
Примеры разъяснений:
Next_Car.all -- явное разъяснение, обозначающее объект, указанный переменной
-- доступа Next_Car (см. 3.10.1)
Next_Car.Owner -- выбранный компонент с неявным разъяснением;
-- то же, что Next_Car.all.Owner
-- доступа Next_Car (см. 3.10.1)
Next_Car.Owner -- выбранный компонент с неявным разъяснением;
-- то же, что Next_Car.all.Owner