



                          ГЛАВА 1

                    Символы и константы

     Символами (лексемами) называются  минимальные  значимые
единицы  текста  в  программе,  написанной на Паскале, и они
представлены такими  категориями  как  специальные  символы,
идентификаторы, метки, числа и строковые константы.
     Программа, написанная на Паскале, состоит из  лексем  и
разделителей;  причем  разделитель представляет собой пробел
или комментарий. Две соседних лексемы, если они представляют
собой зарезервированное слово, идентификатор, метку или чис-
ло, должны быть отделены друг от друга одним  и  несколькими
разделителями.
     Разделители не могут быть частью лексем, за исключением
строковых констант.

       Специальные символы и зарезервированные слова

     Турбо-Паскаль использует следующие подмножества  набора
символов кода ASCII:

     - Буквы английского алфавита от A до Z и от a до z.
     - Цифры - арабские цифры от 0 до 9.
     - Шестнадцатиричные цифры - арабские цифры от 0  до  9,
буквы от A до F и буквы от a до f.
     - Пробелы - символ пробела (ASCII 32) и все управляющие
символы кода ASCII (ASCII 0-31), включая символ конца строки
или символ возврата (ASCII 13).

буква ----------------------------------
              !       !        !       !
              V       V        V       V
              -       -        -       -
             (A) ... (Z)      (a) ... (z)
              -       -        -       -
              !       !        !       !
              ------------------------------------>

                                - 2 -



цифра ------------------------------------------------
        !    !    !    !    !    !    !    !    !    !
        V    V    V    V    V    V    V    V    V    V
        -    -    -    -    -    -    -    -    -    -
       (0)  (1)  (2)  (3)  (4)  (5)  (6)  (7)  (8)  (9)
        -    -    -    -    -    -    -    -    -    -
        !    !    !    !    !    !    !    !    !    !
        --------------------------------------------------->

                           ---------
шестнадцатиричная -------->! цифра !---------------
цифра              !       ---------              !
                   --------------------------     !
                     !       !      !       !     !
                     V       V      V       V     !
                     -       -      -       -     !
                    (A) ... (F)    (a) ... (f)    !
                     -       -      -       -     !
                     !       !      !       !     !
                     -------------------------------------->


     Специальные символы и зарезеривированные  слова  предс-
тавляют  собой  символы, имеющие одно или несколько фиксиро-
ванных значений. Специальными символами  являются  следующие
одиночные символы:

       + - * / = < > [ ] . , ( ) : ; ^ @ { } $ #

     Следующие пары символов также представляют собой специ-
альные символы:

                <= >= := .. (* *) (. .)

     Некоторые специальные символы  являются  также  знаками
операций. Левая квадратная скобка ([) эквивалентна паре сим-

                                - 3 -


волов, состоящей из левой круглой скобки и точки ((.).  Ана-
логично  правая квадратная скобка (]) эквивалентна паре сим-
волов, состоящей из точки и правой круглой скобки (.)).
     Следующие  слова  являются  зарезервированными  в  Тур-
бо-Паскале:

----------------------------------------------------------
absolute  end             inline     procedure  type
and       external        interface  program    unit
array     file            interrupt  record     until
begin     for             label      repeat     uses
case      forward         mod        set        var
const     function        nil        shl        while
div       goto            not        shr        with
do        if              of         string     xor
downto    implementation  or         then
else      in              packed     to
----------------------------------------------------------

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

                       Идентификаторы

     Идентификаторы выступают в качестве имен констант,  ти-
пов, переменных, процедур, модулей, программ и полей в запи-
сях. Идентификатор может иметь любую  длину,  однако  только
первые 63 символа являются значимыми.
     Идентификатор должен начинаться с буквы и не может  со-
держать пробелов. После первого символа идентификатора можно
использовать буквы, цифры и символы подчеркивания  (значение
ASCII  $5F). Как и в зарезервированных словах, в идентифика-
торах можно использовать как строчные, так и прописные буквы
(компилятор их не различает).
     В настоящем руководстве синтаксис Турбо-Паскаля иллюст-
рируется  диаграммами.  Для  чтения синтаксической диаграммы

                                - 4 -


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

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

                    -------
идентификатор ----->!буква!--------------------------------->
                    -------   ^   -------                !
                              !---!буква!<---------------!
                              !   -------                !
                              !   -------                !
                              !---!цифра!<---------------!
                              !   -------                !
                              !   --------------------   !
                              !---!знак подчеркивания!<---
                                  --------------------

                                -
знак подчеркивания ----------> (_)------------>
                                -

идентификатор программы       ---------------
идентификатор модуля   ------>!идентификатор!------>
идентификатор поля            ---------------



                                - 5 -


                                             ---------------
составной  --------------------------------->!идентификатор!-->
идентификатор!                             ^ ---------------
             ! ----------------------   -  !
             ->!идентификатор модуля!->(.)--
               ----------------------   -

     Идентификатор должен начинаться с буквы и не должен со-
держать  пробелов.  После первого символа допускаются буквы,
цифры и знак подчеркивания (ASCII $5F). Как  и  зарезервиро-
ванные  слова, идентификаторы безразличны к регистру клавиа-
туры.
     Когда имеется несколько мест с указанием одного и  того
же  идентификатора, для задания нужного идентификатора необ-
ходимо уточнить этот идентификатор с помощью  идентификатора
модуля  (модули описываются в Главе 4 "Руководства пользова-
теля" и в Главе 12 данного руководства). Например, для уточ-
нения идентификатора Ident с помощью идентификатора UnitName
следует написать UnitNamt.Ident. Такой комбинированный иден-
тификатор называется составным идентификатором.
     Приведем несколько примеров идентификаторов:

Writeln
Exit
Real2String
System.MemAvail
Dos.Exec
Crt.Windows

                           Метки

     Меткой является последовательность цифр в диапазоне  от
0  до  9999. Начальные нули не являются значащими. Метки ис-
пользуются с операторами GOTO (перехода).


                                - 6 -


               -------------------------
метка -------->!последовательность цифр!----------->
         !     -------------------------     ^
         !     ---------------               !
         ----->!идентификатор!----------------
               ---------------

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

                           Числа

     Для чисел, представляющих собой константы целого и  ве-
щественного  типа,  используется  обычная десятичная запись.
Целая  константа  в шестнадцатиричном формате  имеет  в  ка-
честве префикса знак доллара ($). Техническое обозначение (Е
или е с экспонентой) в вещественных типах читается  как  "на
десять   в   степени".  Например,  7Е-2  означает  7х10**-2;
12.25Е+6 или 12.25Е6 оба обозначают 12.25х10**+6.  Синтакси-
ческие диаграммы для записи чисел даны ниже.
                             -------------------------
последовательность --------->!шестнадцатиричная цифра!----->
шестнадцатиричных цифр  ^    -------------------------   !
                        !                                !
                        ----------------------------------

                             -------
последовательность---------->!цифра!---------------------->
цифр                  ^      -------          !
                      !                       !
                      -------------------------

                         -------------------------
целое без знака -------->!последовательность цифр!--------->
                  !      -------------------------       ^
                  !    -     --------------------------  !
                  ----($)--->!последовательность      !---
                       -     !шестнадцатиричных цифр  !
                             --------------------------

                                - 7 -


                  -
знак ----------->(+)--------------->
           !      -        ^
           !      -        !
           ----->(-)--------
                  -

вещественное без
знака  ------------          ------------
   --->!последова-!          !последова-!
       !тельность !--->(.)-->!тельность !------------------->
       !цифр      ! !        !цифр      ! !                ^
       ------------ !        ------------ !                !
                    !                     V  ------------  !
                    ------------------------>!масштабный!---
                                             !множитель !
                                             ------------

                                      --------------------
масштабный---->(E)------------------->!последовательность!-->
множитель  !        ^  !           ^  !цифр              !
           !        !  !   ------  !  --------------------
           --->(e)---  --->!знак!---
                           ------

                     -----------------
число без знака ---->!целое без знака!--------------------->
                 !   -----------------          ^
                 !                              !
                 !   ------------------------   !
                 --->!вещественное без знака!----
                     ------------------------

                                 -----------------
число со знаком ---------------->!число без знака!-------->
                  !          ^   -----------------
                  !  ------  !
                  -->!знак!---
                     ------


                                - 8 -


     Числа с десятичными точками или экспонентами  представ-
ляют  собой константы вещественного типа. Остальные десятич-
ные числа обозначают константы целого типа. Они должны  при-
нимать значения в диапазоне от -2147483648 до 2147483647.
     Шестнадцатиричные числа обозначают  константы  целочис-
ленного типа; они должны находиться в диапазоне от $00000000
до $FFFFFFFF. Окончательный знак значения определяется шест-
надцатиричной записью.

                      Строки символов

     Строка символов представляет собой  последовательность,
содержащую нуль и более символов из расширенного набора сим-
волов кода ASCII (Приложение С), записанную в  одной  строке
программы  и  заключенную  в  одиночные кавычки (апострофы).
Строка символов, ничего не содержащая между апострофами, на-
зывается  нулевой  строкой. Два последовательных апострофа в
строке символов обозначают один символ -  апостроф.  Атрибут
длины  строки символов выражается действительным количеством
символов между апострофами.
     В качестве расширения стандартного  Паскаля  Турбо-Пас-
каль  разрешает вставлять в строку символов управляющие сим-
волы. Символ #с целой константой без знака в диапазоне от  0
до  255  обозначает  соответствующий этому значению символ в
коде ASCII. Между символом #  и целой константой  не  должно
быть никаких разделителей. Аналогично, если несколько управ-
ляющих символов входит строку символов,  то  между  ними  не
должно быть разделителей.
                      -                      -
строка символов -----(')--------------------(')---->
                      -                      -
                      ^                      !
                      !  -----------------   !
                      ---!строчный символ!<---
                         -----------------


                                - 9 -


                      -------------------------------
строчный символ ----->!любой символ кроме (') или CR!----->
                  !   -------------------------------   ^
                  !            -              -         !
                  ----------->(')----------->(')---------
                               -              -
     Строка символов нулевой длины (нулевая строка) допусти-
ма  только  для  строковых  типов. Строка символов с длиной,
равной 1, допустима для любого символьного и строкового  ти-
па.  Строка символов длиной n, где n больше или равен 2, до-
пустима для любого строкового типа и упакованных массивов из
n символов.
     Приведем несколько примеров строк символов:

 'TURBO'  'You'll see'        ''''  ';'  ' '
 #13#10   'Line 1'#13'Line2'    #7#7'Make up!'#7#7

                     Описания констант

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

             ---------------    -    -----------    -
описание  -->!идентификатор!-->(=)-->!константа!-->(;)--->
константы    ---------------    -    -----------    -

                            -------------------------
константа ----------------->!идентификатор константы!----->
            ! !  ------  ^  -------------------------   ^
            ! -->!знак!--!                              !
            !    ------     -----------------           !
            !-------------->!число со знаком!-----------!
            !               -----------------           !
            !               -----------------           !
            --------------->!строка символов!------------
                            -----------------


                                - 10 -


                              -------------
константа ------------------->! выражение !---------->
                              -------------

     Идентификатор константы  с  предшествующим  ему  знаком
обозначает значение целого или вещественного типа.

                    Выражения-константы

     Являясь расширением стандартного Паскаля, Турбо-Паскаль
позволяет  использовать выражения-константы. Выражение-конс-
танта представляет собой выражение, которое может вычислять-
ся компилятором без необходимости выполнения программы. При-
ведем примеры выражений-констант:

 100
 'A'
 256 - 1
 (2.5 + 1) / (2.5 - 1)
 'Turbo' + '' + 'Pascal'
 Chr(32)
 Ord('Z') - Ord('A') + 1

     Простейший случай выражения-константы представляет  со-
бой  простая  константа, например 100 или 'A'. В стандартном
Паскале допускается использовать только простые константы. В
Турбо-Паскале разрешено использование выражений-констант.
     Поскольку компилятор должен иметь возможность полностью
вычислить выражение-константу во время компиляции, в качест-
ве выражений-констант не допускается использовать  следующие
конструкции:

     - ссылки на переменные и типизованные константы;
     - вызовы функций (кроме тех, которые отмечены далее);
     - оператор получения адреса @.

     За исключением этих ограничений для  выражений-констант
соблюдаются  те же синтаксические правила, что и для обычных
выражений (описанных в Главе 6 "Выражения").

                                - 11 -


     В выражениях-константах допускается использовать следу-
ющие стандартные фукнции:

     Abs, Chr, Hi, Length, Lo, Odd, Ord, Pred,  Ptr,  Round,
SizeOf, Succ, Swap, Trunc.

     Приведем  некоторые   примеры   использования   выраже-
ний-констант в описаниях констант:

  const
    Min = 0;
    Max = 100;
    Center = (Max - Min) div 2;
    Beta = Chr(255);
    NumChars = Ord('Z') - Ord('A') + 1;
    Message = 'Out of memory';
    ErrStr = 'Error:' + Message + '.';
    ErrPos = 80 - Length(Error) div 2;
    ErrAttr = Blink + Red * 16 + White;
    Ln10 = 2.302585092994095684;
    Ln10R = 1 / Ln10;
    Numeric = ['0'..'9'];
    Alpha = ['A'..'Z','a'..'z'];
    AlphaNum = Alpha + Numeric;

                        Комментарии

     Следующие конструкции представляют собой комментарии  и
поэтому игнорируются компилятором:

{любой текст, не содержащий правую фигурную скобку}
{любой текст, не содержащий звездочку/правую круглую скобку}

     Комментарий, содержащий знак доллара  ($)  сразу  после
открывающей  скобки { или (*, является директивой компилято-
ра. За символом $ следует мнемоника команды компилятора. Об-
щее описание директив компилятора дано в Приложении В.


                                - 12 -



                      Строки программы

     В Турбо-Паскале  строки  программы  имеют  максимальную
длину в 126 символов.


