Справочник Ada 2005
8.1 Область объявления
Статическая семантика
Для каждого из следующих конструкций существует часть текста программы, называемая её областью объявления, внутри которой могут находиться вложенные объявления:
- любое объявление, кроме объявления типа перечисления, которое не является продолжением предыдущего объявления;
- блок block_statement;
- цикл loop_statement;
- расширенное оператор возврата 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 Для области объявления, состоящей из нескольких частей, текст области объявления не содержит никакого текста, который может появляться между частями. Таким образом, когда часть области объявления говорится, что простирается от одного места до другого в области объявления, эта часть не содержит никакого текста, который может появляться между частями области объявления.