Блоки состоят из описаний, которые записаны и скомбинированы
в любом порядке, и операторов. Каждый блок является частью описа-
ния процедуры или функции, или частью программы или модуля. Все
идентификаторы и метки, объявленные в разделе описаний, являются
для блока локальными.
Синтаксис
─────────────────────────────────────────────────────────────────
В общем виде любой блок имеет следующий формат:
┌──────────┐ ┌──────────┐
блок ────>│ раздел ├────>│ раздел ├────>
│ описания │ │операторов│
└──────────┘ └──────────┘
раздел ──────────┬────────────────────────────────────┬───>
объявления ^ │ ^ │
│ │ ┌──────────────────┐ │ │
│ ├───>│ раздел описания ├──────┤ │
│ │ │ меток │ │ │
│ │ └──────────────────┘ │ │
│ │ ┌──────────────────┐ │ │
│ ├───>│ раздел описания ├──────┤ │
│ │ │ констант │ │ │
│ │ └──────────────────┘ │ │
│ │ ┌──────────────────┐ │ │
│ ├───>│ раздел описания ├──────┤ │
│ │ │ типов │ │ │
│ │ └──────────────────┘ │ │
│ │ ┌──────────────────┐ │ │
│ ├───>│ раздел описания ├──────┤ │
│ │ │ переменных │ │ │
│ │ └──────────────────┘ │ │
│ │ ┌──────────────────┐ │ │
│ ├───>│ оператор exports ├──────┤ │
│ │ └──────────────────┘ │ │
│ │ ┌──────────────────┐ │ │
│ └───>│ раздел описания ├──────┘ │
│ │процедур и функций│ │
│ └──────────────────┘ │
└──────────────────────────────────────────┘
Раздел описания меток - это та часть блока, где описываются
метки, присваиваемые операторам в соответствующем разделе опера-
торов. Каждая метка должна помечать только один оператор.
раздел ┌───────┐ ┌───────┐ ┌───┐
описания ───────>│ label ├──────>│ метка ├──┬──>│ ; ├───>
меток └───────┘ ^ └───────┘ │ └───┘
│ ┌───┐ │
└───┤ , ├──────┘
└───┘
Меткой может быть идентификатор или последовательность цифр.
Используемая в качестве метки последовательность цифр должна на-
ходиться в диапазоне от 0 до 9999.
Раздел описания констант содержит описания констант, локаль-
ных для этого блока.
раздел ┌───────┐ ┌────────────┐
описания ─────>│ const ├────┬─>│ описание ├───────────┬───>
констант └───────┘ ^ │ │ константы │ ^ │
│ │ └────────────┘ │ │
│ │ ┌───────────────────┐ │ │
│ │ │ описание │ │ │
│ └─>│ типизированной ├─┘ │
│ │ константы │ │
│ └───────────────────┘ │
└──────────────────────────────┘
Раздел описания типов включает описания всех типов в блоке.
раздел ┌───────┐ ┌────────────┐
описания ─────>│ type ├──────>│ описание ├────┬───>
типов └───────┘ ^ │ типа │ │
│ └────────────┘ │
└──────────────────────┘
Раздел описания переменных состоит из описания переменных,
локальных для этого блока.
раздел ┌─────┐ ┌────────────┐
описания ─────>│ var ├──────>│ описание ├────┬───>
переменных └─────┘ ^ │ переменной │ │
│ └────────────┘ │
└──────────────────────┘
Раздел описания процедур и функций состоит из описания про-
цедур и функций, локальных для этого блока.
раздел ┌────────────┐
описания ───────────┬─>│ описание ├─────┬────>
процедур и ^ │ │ процедуры │ ^ │
функций │ │ └────────────┘ │ │
│ │ ┌────────────┐ │ │
│ └─>│ описание ├──┘ │
│ │ функции │ │
│ └────────────┘ │
│ ┌────────────┐ │
├────>│ описание ├─────┤
│ │конструктора│ │
│ └────────────┘ │
│ ┌────────────┐ │
├────>│ описание ├─────┤
│ │деструктора │ │
│ └────────────┘ │
└────────────────────────┘
В операторе exports перечисляются все процедуры и функции,
которые экспортируются данной программой или динамически компону-
емой библиотекой. Оператор exports допускается только во внешнем
разделе описаний программы или динамически компонуемой библиотеки
- в разделе описаний процедуры, функции или модуля его использо-
вать нельзя.
Раздел операторов определяет операторы или алгоритмические
действия, которые выполняются в блоке.
раздел ┌───────────┐
операторов ─────>│ составной ├─────>
│ оператор │
└───────────┘