Справочник по Ada 2012
8.1 Область объявления
Статическая семантика
Для каждого из следующих конструктов существует часть текста программы, называемая её областью объявления, внутри которой могут находиться вложенные объявления:
- любое объявление, кроме объявления типа перечисления, которое не является завершением предыдущего объявления;
- определение access_definition;
- оператор block_statement;
- оператор loop_statement;
- выражение quantified_expression;
- расширенный оператор возврата extended_return_statement;
- оператор accept_statement;
- обработчик исключений exception_handler.
Область объявления включает текст конструкта вместе с дополнительным текстом, определяемым (рекурсивно) следующим образом:
- Если включено объявление, то включено и его завершение, если таковое имеется.
- Если включено объявление библиотечной единицы (включая Standard — см. 10.1.1), то включены и объявления всех дочерних единиц (и их завершения, согласно предыдущему правилу). Объявления дочерних единиц следуют за объявлением родительской.
- Если включено объявление type_declaration, то включена соответствующая record_representation_clause, если она есть.
Область объявления объявления также называется областью объявления любого вида или сущности, объявленных этим объявлением.
Объявление находится непосредственно внутри области объявления, если эта область является самой внутренней областью объявления, которая включает объявление (непосредственно окружающая область объявления), не считая области объявления (если таковая имеется), связанной с самим объявлением.
Объявление является локальным для области объявления, если объявление находится непосредственно внутри области объявления. Сущность является локальной для области объявления, если эта сущность объявлена объявлением, которое является локальным для области объявления.
Объявление является глобальным для области объявления, если объявление находится непосредственно внутри другой области объявления, которая включает область объявления. Сущность является глобальной для области объявления, если она объявлена объявлением, которое является глобальным для области объявления.
ПРИМЕЧАНИЯ
1 Дочерние библиотечные единицы находятся внутри области объявления родительской единицы, даже если они не находятся внутри объявления или тела родительской единицы. Это подразумевает, что можно использовать (например) "P.Q" для ссылки на дочернюю единицу P, чьё имя определяется как Q, и что после "use P;" Q может ссылаться (непосредственно) на эту дочернюю единицу.
2 Как объяснялось выше и в 10.1.1, «Единицы компиляции - Библиотечные единицы», все библиотечные единицы являются потомками Standard, и поэтому содержатся в области объявления Standard. Они не находятся внутри объявления или тела Standard, но находятся внутри его области объявления.
3 Для области объявления, которая состоит из нескольких частей, текст области объявления не содержит никакого текста, который может появиться между частями. Таким образом, когда часть области объявления считается простирающейся от одного места к другому в области объявления, эта часть не содержит никакого текста, который может появиться между частями области объявления.