                           Ч А С Т Ь  1.

                      СТАНДАРТ TURBO PASCAL.

                             ГЛАВА 1.

                       ЛЕКСЕМЫ И КОНСТАНТЫ.


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

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

     Примечание: Разделители  не  могут  быть  частью  лексем,   за
исключением строковых констант.


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

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

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

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

     буква
       ———————+——————————————+——————————————+——————————————+
              |              |              |              |
              +              +              +              +
            +———+          +———+          +———+          +———+
            | A |   ...    | Z |          | a |   ...    | z |
            +—+—+          +—+—+          +—+—+          +—+—+
              |              |              |              |
              +——————————————+——————————————+——————————————+—————Ў

     цифра
       ———————+———————————+
              |           |
              +           +
            +———+       +———+
            | 0 |  ...  | 9 |
            +—+—+       +—+—+
              |           |
              +———————————+———————Ў

     шестнадцатиричная
     цифра
                +———————————+
      —————————Ў|   цифра   |—————————————————————————+
          |     +———————————+                         |
          |                                           |
          +———+—————————+—————————+—————————+         |
              |         |         |         |         |
              +         +         +         +         |
            +———+     +———+     +———+     +———+       |
            | A | ..  | F |     | a | ... | f |       |
            +—+—+     +—+—+     +—+—+     +—+—+       |
              |         |         |         |         |
              +—————————+—————————+—————————+—————————+———Ў

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

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

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

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

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

        Таблица 1.1. Зарезервированные слова Turbo Pascal.

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

       Для Turbo Pascal безразличен регистр клавиатуры,  поэтому Вы
можете использовать в своей программе как строчные, так и прописные
буквы.

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

         Таблица 1.2. Стандартные директивы Turbo Pascal.

———————————————————————————————————————————————————————————————————
     absolute       external      forward        near
     assembler      far           interrupt      private
                                                 virtual
———————————————————————————————————————————————————————————————————

     Заметим, что private зарезервировано только внутри объектов.


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

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


                          +———————————+
     Идентификатор ——+———Ў|   буква   |—————————————————————————+—Ў
                     |    +———————————+ ° °                     |
                     |  +—————————————+ | |                     |
                     +—Ў|   символ    +—+ |   +—————————————+   |
                        |подчеркивания|   +———+    буква    |ў——+
                        +—————————————+   |   +—————————————+   |
                                          |                     |
                                          |   +—————————————+   |
                                          +———+    цифра    |ў——+
                                          |   +—————————————+   |
                                          |                     |
                                          |   +—————————————+   |
                                          +———+   символ    |ў——+
                                              |подчеркивания|
                                              +—————————————+

                               +———+
     символ подчеркивания—————Ў| _ |—————Ў
                               +———+

     идентификатор программы        +—————————————+
     идентификатор модуля     —————Ў|идентификатор|————Ў
     идентификатор поля             +—————————————+

                                              +———————————————+
     уточненный   —+——————————————————————————+ идентификатор +———Ў
     идентификатор |                       °  +———————————————+
                   | +———————————+   +———+ |
                   +Ў|идентифика-+——Ў| . +—+
                     |    тор    |   +———+
                     |  модуля   |
                     +———————————+

     Приведем несколько примеров идентификаторов:

        Writeln
        Exit
        RealString
        System.MemAvail
        Dos.Exec
        Crt.Window


                               Метки

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

                            +——————————————————————+
     Метка ———————+————————Ў|  последовательность  +——————————Ў
                  |         |       цифр           |      °
                  |         +——————————————————————+      |
                  |                                       |
                  |            +—————————————+            |
                  +———————————Ў|идентификатор+————————————+
                               +—————————————+

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


                               Числа

     Для чисел,   представляющих   собой   константы    целого    и
вещественного типа,  используется обычная десятичная запись.  Целая
константа в шестнадцатиричном формате  имеет  в  качестве  префикса
знак доллара ($). Техническое обозначение (Е или е с экспонентой) в
вещественных типах читается как "десять в степени".
     Например:

     7е-2        "7 умноженное на 10 в степени -2";

     12.25е+6
     12.25е+6    "12.25 умноженное на 10 в степени +6;


     Ниже приведены синтаксические диаграммы для записи чисел.

                                 +—————————————————+
     последовательность ————————Ў|шестнадцатиричная+———————+——Ў
     шестнадцатиричных     °     |     цифра       |       |
     цифр                  |     +—————————————————+       |
                           +———————————————————————————————+

                                 +—————————————————+
     последовательность ————————Ў|                 +———————+———Ў
     цифр                  °     |     цифра       |       |
                           |     +—————————————————+       |
                           +———————————————————————————————+

                                +——————————————————+
     целые без знака  ————+————Ў|последовательность+———————————Ў
                          |     |     цифр         |     °
                          |     +——————————————————+     |
                          |                              |
                          |     +———+     +——————————————+———+
                          +————Ў| $ |————Ў|последовательность|
                                +———+     |шестнадцатиричных |
                                          |       цифр       |
                                          +——————————————————+
                 +———+
     знак  —+———Ў| + +———————Ў
            |    +———+   °
            |    +———+   |
            +———Ў| - +———+
                 +———+

     вещественное без знака
      |   +——————————+    +———+  +——————————+
      +——Ў|Последова-+—+—Ў| . +—Ў|последова-+——+——————————————————Ў
          |тельность | |  +———+  |тельность |  |               °
          | цифр     | |         | цифр     |  |               |
          +——————————+ |         +——————————+  |               |
                       |                       +  +——————————+ |
                       +—————————————————————————Ў|масштабный+—+
                                                  | множитель|
                                                  +——————————+

     масштабный
     множитель
      |          +———+                      +——————————————+
      +———————+—Ў| Е +—————+———————————————Ў|последователь-+——Ў
              |  +———+ °   |          °     |ность цифр    |
              |  +———+ |   |  +————+  |     +——————————————+
              +—Ў| е +—+   +—Ў|знак+——+
                 +———+        +————+


     число без знака
      |              +———————————————+
      +———————————+—Ў|целое без знака+————————Ў
                  |  +———————————————+    °
                  |  +————————————+       |
                  +—Ў|вещественное+———————+
                     |без знака   |
                     +————————————+

     число со знаком
      |                          +———————————————+
      +————————+————————————————Ў|число без знака+————Ў
               |             °   +———————————————+
               |  +————+     |
               +—Ў|знак+—————+
                  +————+


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


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

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



                     +———+                    +———+
     строка   ——————Ў| ' +——————————————+————Ў| ' +————Ў
     символов        +———+ °  +——————+  |     +———+
                           +——+символ|ў—+
                              |строки|
                              +——————+

                          +——————————————————————+
                          |                      |
     символ строки ———+——Ў|любой символ, кроме ' +——————Ў
                      |   | или CR               |   °
                      |   +——————————————————————+   |
                      |        +———+       +———+     |
                      +———————Ў| ' +——————Ў| ' +—————+
                               +———+       +———+

     Примечание: CR - символ возврата каретки.

     Строка символов нулевой длины (пустая строка) совметима только
для строковым типом. Строка символов с длиной, равной 1, совместима
с любым символьным и строковым типом.  Строка символов с длиной  N,
где N  больше  или равно 2,  совместима с любым строковым типом и с
упакованным массивом из N символов.
     Приведем несколько примеров строк символов:

     'TURBO'   'You''ll see'        ''''    ';'     ' '
     #13#10    'Line 1'#13'Line 2'   #7#7'Wake up!'#7#7


                        Объявление констант

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

     объявление константы
      |      +—————————————+    +———+   +—————————+    +———+
      +—————Ў|идентификатор+———Ў| = +——Ў|константа+———Ў| ; +—+—Ў
        °    +—————————————+    +———+   +—————————+    +———+ |
        +————————————————————————————————————————————————————+

                    +—————————+
     константа ————Ў|выражение+———Ў
                    +—————————+

     В качестве   расширения   стандартного  Паскаля  Turbo  Pascal
разрешает использовать константные выражения. Константное выражение
-   это   выражение,  которое  может  быть  вычислено  компилятором
фактически без выполнения программы.  Приведем примеры  константных
выражений:

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

     Простейшим случаем  константного  выражения  является  простая
константа,  такая как 100 или  'А';  в  то  время  как  стандартный
Паскаль допускает только простую константу, Turbo Pascal допускает
константные выражения.
     Так как  компилятор  вычисляет  константное выражение за время
компиляции,  то в константных  выражениях  не  разрешены  следующие
конструкции:

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

     За исключением   этих   ограничений,   константные   выражения
подчиняются точно таким же синтаксическим правилам,  что и  обычные
выражения (описанные в главе 6 "Выражения").
     В константных выражениях разрешаются стандартные функции:

     Abs     Chr     Нi      Length     Lo      Odd     Ord

     Pred    Ptr     Round   SizeOf     Succ    Swap    Trunc

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

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


                            Комментарии

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

     {Any text not containing right brace}
     (* Any text not containing star/right parenthesis*)

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


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

     В Turbo Pascal строки программы имеют максимальную длину в 126
символов.
