



                          ГЛАВА 2

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

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

                         Синтаксис

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

             -----------------       -------------------
блок ------->!раздел описания!------>!раздел операторов!-->
             -----------------       -------------------

раздел --------------------------------------------------->
описания ^ !   -----------------------               ^  !
         ! !-->!раздел описания меток!---------------!  !
         ! !   -----------------------               !  !
         ! !   --------------------------            !  !
         ! !-->!раздел описания констант!------------!  !
         ! !   --------------------------            !  !
         ! !   -----------------------               !  !
         ! !-->!раздел описания типов!---------------!  !
         ! !   -----------------------               !  !
         ! !   ----------------------------          !  !
         ! !-->!раздел описания переменных!----------!  !
         ! !   ----------------------------          !  !
         ! !   ------------------------------------  !  !
         ! --->!раздел описания процедур и функций!---  !
         !     ------------------------------------     !
         ------------------------------------------------

     Раздел описания меток - это та часть блока, где  описы-

                                - 2 -


ваются  метки,  присваиваемые  операторам  в соответствующем
разделе  операторов.  Каждая метка  должна  помечать  только
один оператор.
                           -----       -------        -
раздел описания меток --->(label)----->!метка!------>(;)-->
                           -----   ^   -------   !    -
                                   !      -      !
                                   ------(,)-----
                                          -
     Используемая в качестве метки  последовательность  цифр
должна находиться в диапазоне от 0 до 9999.
     Раздел описания констант  содержит  описания  констант,
локальных для этого блока.

                                 --------------------
раздел описания--->(const)------>!описание константы!--------->
констант                   ^ !   --------------------     ^ !
                           ! !   -----------------------  ! !
                           ! --->!описание типизованной!--- !
                           !     !константы            !    !
                           !     -----------------------    !
                           ----------------------------------

     Раздел описания типов включает описания  всех  типов  в
блоке.
                           ----      ---------------
раздел описания типов---->(type)---->!описание типа!------->
                           ----  ^   ---------------   !
                                 !                     !
                                 -----------------------
     Раздел описания переменных состоит из описаний перемен-
ных, локальных для этого блока.

                    ---      ---------------------
раздел описания--->(var)---->!описание переменной!-------->
переменных          ---  ^   ---------------------      !
                         !                              !
                         --------------------------------

                                - 3 -



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

                         ----------------------
раздел описания----------! описание процедуры !
процедур и функций       ----------------------
                         ----------------------
                         !  описание функции  !
                         ----------------------

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

                         ----------------------
раздел операторов------->! составной оператор !---------->
                         ----------------------

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

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

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

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


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

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

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

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


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


