Dear User !!

     У Вас появился новый программный продукт - транслятор
Delta-Pascal V1.2. Эта версия представляет собой подмножество
стандарта языка PASCAL. Реализованы основные конструкции языка
и типы данных. Однако это только начало. Разработка языка
продолжается, и вскоре язык дорастет до стандарта, описанного
Н.Виртом, а затем продолжит свое развитие в направлении
Turbo-Pascalя (появятся интегрированная среда, библиотека
функций, отладочные средства и т.д. - все то, что сделало
популярным Turbo-Pascal).
     
     Варианты транслятора реализованы для работы в среде
ОС "Спрайт" (Агат 7 и 9) и в среде Best Tool Kit (Агат-9).
По заказу транслятор может быть адаптирован практически к
любой операционной среде.

     Для запуска транслятора в среде Best Tool Kit наберите
команду

     [RUN PASCAL

После ввода имени текстового файла с программой начнется
трансляция, при этом Вы будете видеть строки своей программы.
В случае обнаружения ошибки, Вы получите сообщение об этом и
символом '^' будет отмечено то место, где Вы ошиблись. К
сожалению, сообщения об ошибке не всегда содержат исчерпывающую
информацию о характере ошибки, поэтому в непонятных ситуациях
посмотрите по-внимательнее в программу и в описание языка,
приведенное ниже.
Если же синтаксических ошибок в Вашей программе не обнаружено, 
то это еще не означает, что она будет правильно работать, но
ее можно будет запустить чтобы проверить это. Сначала Вам 
будет предложено запомнить оттранслированную программу на
диск. Если Вы согласитесь, то наберите имя файла отличное от
файла с исходной программой. Затем Вам будет предложено
запустить Вашу программу, после чего Вы вернетесь в отладчик.
     Если Вы записали оттранслированную программу на диск,
то для запуска ее наберите

     [RUN <имя>

     Для запуска транслятора в ОС "Спрайт" необходимо войти
в подкаталог 'PASCAL' или 'PAS' и запустить транслятор, для
чего необходимо просто набрать имя файла с транслятором:

     PASCAL

Диалог с программой такой же, как описан выше. Для исходного
текста программы на PASCALе рекомендуется использовать
расширение .PAS, а для готовой программы .PRG (иначе Вы не
сможете запустить ее из командного диалог ОС просто по имени).

     Ниже приводится не вполне формальное описание синтаксиса
конструкций языка, реализованных в данной версии.
     Операторы и описания разделяются ';', имена, выражения
и все остальное - запятыми.
     Квадратными скобками обозначены необязательные части.
     Комментарии обозначаются скобками (* и *).
     Шестнадцатеричные числа обозначаются знаком '¤' перед
числом.

     Программа имеет вид:

<программа> ::= PROGRAM <имя> [ (OUTPUT,INPUT) ] ;
                [ VAR <описания переменных;>; ]
                [ <описания процедур и функций;>; ]
                <оператор>.

<описание переменной> ::= <имя> [ AT <адрес> ] : <тип>
                          \-----< , <--------/

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

<тип> ::= <простой тип> | <массив>

<массив> ::= ARRAY [ <число> .. <число> ] OF <простой тип>

<простой тип> ::= INTEGER | CHAR | BOOLEAN | BYTE | WORD

<описание процедуры> ::= 
     PROCEDURE <имя> [ (<описания параметров;>) ] ;
     [ VAR <описания переменных;>; ]
     <оператор>.

<описание функции> ::= 
     FUNCTION <имя> [ (<описания параметров;>) ] : <простой тип> ;
     [ VAR <описания переменных;>; ]
     <оператор>.

     Ниже приводятся описания синтаксиса операторов с пояснениями
без обозначения <оператор> ::= 
     
Составной оператор:

     BEGIN <операторы;> END

Условный оператор:

     IF <условие> THEN <оператор> [ ELSE <оператор> ]

Оператор перебора:

     SELECT
       <условие> : <оператор>
       <условие> : <оператор>
       <условие> : <оператор>
       ...
       [ ELSE <оператор> ]
     END

Операторы цикла:

     WHILE <условие> DO <оператор>

     REPEAT <оператор> UNTIL <условие>

     FOR <имя> [ := <выр-е> ] TO|DOWNTO <выр-е> DO <оператор>

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

Оператор присваивания:

     <имя> [ <индекс> ] := <выражение>
     <имя> [ <индекс> ] += <выражение>
     <имя> [ <индекс> ] -= <выражение>

Операторы ввода вывода:

     WRITE   [ ( <выражения,> ) ]
     WRITELN [ ( <выражения,> ) ]
     READ    [ ( <имена,> ) ]
     READLN  [ ( <имена,> ) ]

Вызов процедуры:

     <имя процедуры> ( <выражения,> )

Обращение к подпрограмме на ассемблере:

     ASM ( <выражение-адрес> )

Для передачи значений следует пользоваться переменными,
размещенными по абсолютным адресам, при этом надо учитывать,
что типы BYTE, CHAR и BOOLEAN занимают 1 байт, а INTEGER и
WORD - 2 байта.

     В выражениях можно использовать операции:

    +   - сложение
    -   - вычитание
    *   - умножение
    /   - деление
    DIV - деление нацело
    MOD - остаток от деления

     В условиях знаки сравнения       = <> > >= < <=
                и логические операции AND, OR и NOT

     Версия 1.2 имеет множество ограничений :

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

     Пожелания и замечания будут внимательно выслушаны
разработчиком по т. (812)-520-43-16 с утра до вечера.

                                 Сергей Гавриленко