Справочник по Ada 2012
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