Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Паскаль / tp3 / tp3 / 2

.doc
Скачиваний:
17
Добавлен:
10.12.2013
Размер:
42.5 Кб
Скачать

Глава 2. Блоки, локальность и область действия

Блоки состоят из описаний, которые записаны и скомбинированы в любом порядке, и операторов. Каждый блок является частью описания процедуры или функции, или частью программы или модуля. Все идентификаторы и метки, объявленные в разделе описаний, являются для блока локальными.

Синтаксис

В общем виде любой блок имеет следующий формат:

┌─────────────────┐ ┌───────────────────┐

блок ──────│ раздел описаний ├──────│ раздел операторов ├──

└─────────────────┘ └───────────────────┘

раздел ────┬────────────────────────────────────────────┬─

описания ‑ │ ┌─────────────────────┐ ‑ │

│ ├──│раздел описания меток├───────────────┤ │

│ │ └─────────────────────┘ │ │

│ │ ┌────────────────────────┐ │ │

│ ├──│раздел описания констант├────────────┤ │

│ │ └────────────────────────┘ │ │

│ │ ┌─────────────────────┐ │ │

│ ├──│раздел описания типов├───────────────┤ │

│ │ └─────────────────────┘ │ │

│ │ ┌──────────────────────────┐ │ │

│ ├──│раздел описания переменных├──────────┤ │

│ │ └──────────────────────────┘ │ │

│ │ ┌──────────────────────────────────┐ │ │

│ └──│раздел описания процедур и функций├──┘ │

│ └──────────────────────────────────┘ │

└──────────────────────────────────────────────┘

Раздел описания меток - это та часть блока, где описываются метки, присваиваемые операторам в соответствующем разделе операторов. Каждая метка должна помечать только один оператор.

╒═════╕ ┌─────┐ ╒═╕

раздел описания меток ───│label├─────│метка├───┬──│;├─────

╘═════╛ ‑ └─────┘ │ ╘═╛

│ ╒═╕ │

└─────┤,├─────┘

╘═╛

Используемая в качестве метки последовательность цифр должна находиться в диапазоне от 0 до 9999.

Раздел описания констант содержит описания констант, локальных для этого блока.

╒═════╕ ┌──────────────────┐

раздел описания───│const├───┬──│описание константы├───────┬─

констант ╘═════╛ ‑ │ └──────────────────┘ ‑ │

│ │ ┌─────────────────────┐ │ │

│ └──│описание типизованной├──┘ │

│ │константы │ │

│ └─────────────────────┘ │

└────────────────────────────────┘

Раздел описания типов включает в себя описания всех типов в блоке.

╒═════╕ ┌─────────────┐

раздел описания типов────│type ├────│описание типа├───┬──

╘═════╛ ‑ └─────────────┘ │

│ │

└─────────────────────┘

Раздел описания переменных состоит из описаний переменных, локальных для этого блока.

╒═══╕ ┌───────────────────┐

раздел описания───│var├────│описание переменной├──────┬─

переменных ╘═══╛ ‑ └───────────────────┘ │

│ │

└──────────────────────────────┘

Раздел описания процедур и функций состоит из описаний процедур и функций, локальных для этого блока.

┌────────────────────┐

раздел описания─────┬─┬──┤ описание процедуры ├────────────────

процедур и функций │ │ └────────────────────┘ ‑ ‑

│ │ ┌────────────────────┐ │ │

│ ├─│ описание функции ├───────┤ │

│ │ └────────────────────┘ │ │

│ │ ┌────────────────────────┐ │ │

│ ├─│ описание конструктора ├───┤ │

│ │ └────────────────────────┘ │ │

│ │ ┌───────────────────────┐ │ │

│ └─│ описание деструктора ├────┘ │

│ └───────────────────────┘ │

└─────────────────────────────────────┘

Раздел операторов определяет операторы или алгоритмические действия, которые должны быть выполнены блоком.

┌────────────────────┐

раздел операторов───────│ составной оператор ├──────────

└────────────────────┘

Правила для области действия

Наличие идентификатора или метки в описании означает определение идентификатора или метки. Каждый раз, когда идентификатор или метка встречаются в программе, они должны находиться в области действия этого описания. Область действия идентификатора или метки распространяется от их описания до конца текущего блока, включая все блоки, входящие в текущий блок. Ниже приводится несколько исключений.

- Переопределение во вложенном блоке. Допустим, что Exterior является блоком, в который вложен другой блок Interior. Если Exterior и Interior содержат идентификаторы с одинаковым именем, например, j, то Interior имеет доступ только к идентификатору j, который в нем описан, и аналогично Exterior имеет доступ только к идентификатору j, описание которого он содержит.

- Положение описания внутри блока. Идентификаторы и метки нельзя использовать до тех пор, пока они не описаны. Описание идентификатора или метки должно предшествовать любому вхождению идентификатора или метки в тексте программы, с одним исключением.

Базовый тип типа указатель может быть идентификатором, который еще не описан. Однако, в конечном итоге этот идентификатор должен быть описан в том же разделе описания, где встречается данный тип указатель.

- Переопределение внутри блока. Идентификатор или метка могут быть описаны только один раз на внешнем уровне данного блока. Единственным исключением является случай, когда описание указывается внутри блока, входящего в данный, или когда описание указывается в списке полей записи.

Идентификатор поля записи описывается в рамках типа запись и имеет значение только в сочетании со ссылкой на переменную этого типа запись. Поэтому вы можете повторно определить идентификатор поля (с таким же написанием) в том же самом блоке, но не на том же самом уровне в рамках указанного типа запись. Однако, идентификатор, который был ранее описан, может быть повторно определен как идентификатор поля в том же самом блоке.

Область действия компонентов объекта распространяется на область данного типа объекта (см. далее).

Область действия интерфейса и стандартных идентификаторов

Программы и модули, содержащие операторы uses (операторы использования) имеют доступ к идентификаторам, которые описаны в интерфейсной части модулей, указанных в этих операторах uses.

Каждый модуль в операторе uses определяет свою область действия, которая охватывает остальные модули и программу в целом. Первый модуль в операторе uses представляет самую внешнюю область действия, а последний модуль представляет самую внутреннюю область действия. Это означает, что если два или более модулей содержат описание одного и того же идентификатора, то при неуточненном обращении к этому идентификатору будет выбран тот вариант, который был описан в последнем модуле в операторе uses. Однако, вы можете выбрать любой вариант этого идентификатора, указав уточненный идентификатор.

Идентификаторы встроенных констант, типов, переменных, процедур и функций Турбо Паскаля действуют так, как если бы они были описаны в блоке, охватывающем все используемые модули и программу в целом. В действительности эти стандартные объекты описаны в модуле System, который используется любой программой или модулем прежде любого модуля, указанного в операторе uses. Это означает, что любой модуль или программа могут переопределить стандартные идентификаторы, а обращение к ним может быть выполнено с помощью уточненного (составного) идентификатора, например, System.Integer или System.Writeln.

Соседние файлы в папке tp3