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

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

ЪДДДДДДДДДДї  ЪДДДДДДДДДДї

  блок ДДДД>і раздел  ГДДДД>і  раздел ГДДДД>

і описания і  іоператорові

АДДДДДДДДДДЩ  АДДДДДДДДДДЩ

 

   раздел ДДДДДДДДДДВДДДДДДДВДДД>

   объявления ^  і   ^ і

  і  іЪДДДДДДДДДДДДДДДДДДї   і  і

  і  ГДДД>і  раздел описания ГДДДДДДґ і

  і  іі   меток і  і  і

 і  і АДДДДДДДДДДДДДДДДДДЩ   і і

  і  іЪДДДДДДДДДДДДДДДДДДї   і  і

  і  ГДДД>і  раздел описания ГДДДДДДґ і

  і  іі  констант  і  і  і

     і і АДДДДДДДДДДДДДДДДДДЩ   і і

  і  іЪДДДДДДДДДДДДДДДДДДї   і  і

  і  ГДДД>і  раздел описания ГДДДДДДґ і

  і  іі   типов і   і  і

  і  іАДДДДДДДДДДДДДДДДДДЩ   і  і

  і  іЪДДДДДДДДДДДДДДДДДДї   і  і

  і  ГДДД>і  раздел описания ГДДДДДДґ і

  і  іі переменных і  і  і

  і  іАДДДДДДДДДДДДДДДДДДЩ   і  і

  і  іЪДДДДДДДДДДДДДДДДДДї   і  і

  і  ГДДД>і оператор exports ГДДДДДДґ  і

  і  іАДДДДДДДДДДДДДДДДДДЩ   і  і

  і  іЪДДДДДДДДДДДДДДДДДДї   і  і

  і  АДДД>і  раздел описания ГДДДДДДЩ і

  і іпроцедур и функцийі   і

 іАДДДДДДДДДДДДДДДДДДЩ   і

 АДДДДДДДДДДДДДЩ

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

раздел  ЪДДДДДДДїЪДДДДДДДї   ЪДДДї

описания ДДДДДДД>і label ГДДДДДД>і метка ГДДВДД>і ; ГДДД>

меток   АДДДДДДДЩ  ^   АДДДДДДДЩ  і  АДДДЩ

   і   ЪДДДї  і

   АДДДґ , ГДДДДДДЩ

АДДДЩ

Меткой может быть идентификатор или последовательность цифр.

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

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

   раздел   ЪДДДДДДДїЪДДДДДДДДДДДДї

   описания ДДДДД>і const ГДДДДВД>і  описание  ГДДДДДДДДДДДВДДД>

   констант АДДДДДДДЩ ^  і  і константы і  ^  і

і  і АДДДДДДДДДДДДЩ  і  і

і  і ЪДДДДДДДДДДДДДДДДДДДї і  і

і  і і  описание   і і і

і  АД>і  типизированной  ГДЩ  і

    і і  константы  іі

і  АДДДДДДДДДДДДДДДДДДДЩ і

АДЩ

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

   раздел  ЪДДДДДДДї ЪДДДДДДДДДДДДї

   описания ДДДДД>і type  ГДДДДДД>і  описание  ГДДДДВДДД>

   типов АДДДДДДДЩ  ^ ітипа і і

  і АДДДДДДДДДДДДЩ і

  АДДДДДДДДДДДДДДДДДДДДДДЩ

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

   раздел   ЪДДДДДїЪДДДДДДДДДДДДї

   описания ДДДДД>і var ГДДДДДД>і  описание  ГДДДДВДДД>

   переменных  АДДДДДЩ  ^ і переменной і і

   і АДДДДДДДДДДДДЩ і

  АДДДДДДДДДДДДДДДДДДДДДДЩ

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

   раздел  ЪДДДДДДДДДДДДї

   описания ДДДДДДДДДДДВД>і  описание ГДДДДДВДДДД>

   процедур и ^  і  і процедуры і  ^  і

   функций і  і  АДДДДДДДДДДДДЩ  і  і

  і  і ЪДДДДДДДДДДДДї  і  і

  і  АД>і описание  ГДДЩ  і

  і  і функции   і  і

  і  АДДДДДДДДДДДДЩ  і

  і  ЪДДДДДДДДДДДДї  і

  ГДДДД>і  описание ГДДДДДґ

  і  іконструктораі  і

  і  АДДДДДДДДДДДДЩ  і

  і  ЪДДДДДДДДДДДДї  і

  ГДДДД>і  описание ГДДДДДґ

  і  ідеструктора і  і

  і  АДДДДДДДДДДДДЩ  і

 АДДДДДДДДДДДДДДДДДДДДДДДДЩ

В операторе  exports перечисляются все процедуры и функции,  которые экспортируются данной программой или динамически компонуемой библиотекой.  Оператор exports допускается только во внешнем  разделе описаний программы или динамически компонуемой библиотеки  - в разделе описаний процедуры,  функции или модуля его использовать нельзя.

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

   раздел  ЪДДДДДДДДДДДї

   операторов ДДДДД>і составной ГДДДДД>

  і  оператор і

  АДДДДДДДДДДДЩ

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

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

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

program Outer; { начало внешней области действия ъ

type

   I = Integer; { определяет I как Integer }

var

   T: I;  { определяет T как целочисленную

  переменную }

procedure Inner;  { начало внутреннего блока }

type

   T = I; { переопределяет T с типом Integer }

var

   I: T;  { переопределяет I как целочисленную

  переменную }

begin

   I := 1;   { конец вложенного блока }

end;

 

    begin

   T := 1;   { конец внешнего блока }

end.

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

Примечание: О типе запись рассказывается в Главе 4.

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

Примечание: о типе запись рассказывается в Главе 4.

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

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

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