<< Вернуться к содержанию





      НАУЧНО-ИССЛЕДОВАТЕЛЬСКАЯ И ПРОИЗВОДСТВЕННАЯ ЛАБОРАТОРИЯ
                       "ПРОГРАМНО ОСИГУРЯВАНЕ"
      -------------------------------------------------------









                        ПЕРСОНАЛЬНЫЙ МИКРОКОМПЬЮТЕР
                              ПЫЛДИН 601/601А


                                 UniPASCAL

                                версия 1.00

                         РУКОВОДСТВО ПОЛЬЗОВАТЕЛЯ

                       часть 2 - Описание транслятора












                               София - 1989



         2                                                     UniPASCAL-2
         -----------------------------------------------------------------

         Copyright (с) 1989 НИПЛ"Програмно осигуряване", София, НРБ

              UniDOS и UniBIOS являются регистрированными торговыми марками
         и наименованиями НИПЛ"Програмно осигуряване".
              "Пылдин" является регистрированной торговой маркой и наимено-
         ванием Содружества "АБАКУС", НРБ.

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


         Программный дизаин и реализация: Георги Петров

         Редакция: к.т.н. инж. Недялко Тодоров

              НИПЛ "Програмно осигуряване"  благодарит каждого, кто вышлет
         свои замечания, рекомендации и деловые предложения по адресу:

                Болгария 1126 София,
                бульвар "Антон Иванов" 5
                НИПЛ"Програмно осигуряване"

         UniPASCAL-2                                                     3
         -----------------------------------------------------------------


                                С О Д Е Р Ж А Н И Е

              1. Компилятор UniPASCAL                                  4
                 1.1. Вызов компилятора                                4
                 1.2. Стандартные расширения имен файлов               4
                 1.3. Внутренное представление данных                  5

              2. Управление компиляцией                                6
                 2.1. Переключающие директивы                          7
                 2.2. Директивы с параметром                           9
                 2.3. Условная компиляция                              9
                      2.3.1. Директивы DEFINE и UNDEF                  9
                      2.3.2. Директивы IFDEF, IFNDEF, IFOPT,
                             ELSE, ENDIF                              10

              3. Диагностические сообщения компилятора                11
                 3.1. Ошибки, не влияющие на процесс компиляции       11
                 3.2. Нефатальные ошибки                              12
                 3.3. Фатальные ошибки                                21

              4. Диагностические сообщения интерпретатора             23

         4                                                     UniPASCAL-2
         -----------------------------------------------------------------



              1.  КОМПИЛЯТОР UniPASCAL

              1.1. Вызов компилятора

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

                             UPC <имя_исходного_файла>

              Если имя исходного файла не содержит расширение, по умолчанию
         считается, что расширение .PAS.

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

              При вызове компилятора можно дополнительными параметрами
         определить один или более идентификаторов условной компиляции (об
         условной компиляции смотрите ниже).  Дополнительные параметры вво-
         дятся в виде /Dxxx, где ххх - идентификатор условной компиляции.
         Каждый дополнительный параметр соответствует одной строке {$define
         xxx}, введенной в начале программы.

              Пример:  допустим, что необходимо компилировать исходный файл
         MY_Prog.pas и при этом определить идентификатор условной компиля-
         ции Comp_id.  Вызов компилятора следует осуществить командой:

                               UPC my_prog /Dcomp_id





              1.2.  Стандартные расширения имен файлов

              При разработке компилятора UniPASCAL приняты следуюшие стан-
         дартные (воспринимаемые по умолчанию) имена файлов:

              PAS - расширение имен исходных файлов;

              PGM - расширение имен файлов, содержащих выполнимые
         программы;

              SYM - расширение имен файлов, содержащих интерфейсные части
         компилируемых модулей;

              BDY - расширение имен файлов, содержащих тела (implementation)
         компилируемых модулей;

         UniPASCAL-2 - Компилятор UniPASCAL                              5
         -----------------------------------------------------------------



              1.3.  Внутренное представление данных

              Все переменные располагаются в памяти на границе слова (2
         байта) и имеют длину, кратную 16 битам.  Исключение составляют
         элементы массивов или записей, для которых прямо указано пакети-
         рование данных. Строки символов всегда пакетированы.

              Все простые переменные, исключая переменных типа указателя,
         записаны в памяти в порядке младший байт - старший байт. Указатели
         записываются в порядке старший байр - младший байт.

         6                            UniPASCAL-2 - Управление компиляцией
         -----------------------------------------------------------------




              2.  УПРАВЛЕНИЕ КОНПИЛЯЦИЕЙ

              Процесс компиляции исходного текста управляется при помощи
         директив компилятору. Директива вводится в исходный текст в виде
         комментария со следующим специальным синтаксисом:

           CompilerOption =    '{$' directive '}' | '(*$' directive '*)'

         т.е. - первым символом комментарной формы записи должен быть знак
         доллара "$".

              ВНИМАНИЕ!  В одной строке исходного текста (в одной коммен-
         тарной форме) может быть записана только одна директива.  Все на-
         ходящееся после первого пробела в комментарной форме считается
         нормальным комментарием.  Исключением состовляют т.н.  "переключа-
         ющие" директивы (см.  ниже).  Для них допускается ввод более одной
         директивы в одной форме, но при условии, что директивы разделены
         запятыми БЕЗ ПРОБЕЛОВ.  Каждая директива должна быть записана пол-
         ностью в одной строке (в одной комментарной форме).

              Если в исходном тексте найден текст несуществующей директивы,
         компилятор UniPASCAL выдает соответствующее сообщение, но не воз-
         никает ситуация ОШИБКА.

              Директивы UniPASCAL-я можно разделить на три группы:

              - ПЕРЕКЛЮЧАЮЩИЕ директивы - директивы включения или выключе-
         ния определенных действий, определенных возможностей компилятора.
         Переключающие директивы состоят из однобуквенного идентификатора
         директивы и знака "+" (плюс - включить) или "-" (минус - выклю-
         чить).  Между идентификатором и знаком не должны находиться другие
         символы.  Как уже было подчеркнуто, в одной директивной форме мож-
         но записать несколько переключающих директив, разделенных запятыми
         без пробелов.  Например, строки
                                       {$I+}
                                       {$R-}
         можно заменить строкой
                                      {I+,R-}
         но не и строкой
                                      {I+, R-}

              В последнем случае текст "R-" будет считаться нормальным ком-
         ментарием.

              - директивы С ПАРАМЕТРОМ - после однобуквенного идентификато-
         ра директивы следует ввести (через пробел) соответствующий пара-
         метр выполнения директивы;

              - директивы УСЛОВНОЙ КОМПИЛЯЦИИ - в качестве идентификатора
         променяется ключевое слово.  Часть директив этой группы предусма-
         тривает ввод соответствующих параметров.

         UniPASCAL-2 - Управление компиляцией                            7
         -----------------------------------------------------------------


              2.1.  Переключающие директивы

              Внимание!  При описании переключающих директив в заголовке
         указан знак ("+" или "-" - "включить" или "выключить", соответ-
         ственно), который является значением ПО УМОЛЧАНИЮ.



              2.1.1.   I+   - генерация кода проверки результата выполнения
                              операции ввода/вывода

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

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



              2.1.2.   R+   - генерация кода проверки во время выполнения
                              программы соблюдения границ диапазона.

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

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



              2.1.3.   W+   - выдача диагностического сообщения о резуль-
                              татах компиляции оператора, перед которым
                              находится директива.


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

              Действие директивы распространяется только на один - следую-
         щий за директивой - оператор.  После его компиляции выдача сообще-
         нии включается автоматически.  В случае необходимости выключить
         сообщения о нескольких последовательных операторах, рекомендуем
         объединить их конструкцией begin ...  end в составной оператор и
         записать директиву {$W-} перед ним.

         8                            UniPASCAL-2 - Управление компиляцией
         -----------------------------------------------------------------


              2.1.4.   Y+   - интерпретация символьной последовательности
                              (*) в качестве законченного комментария.

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

                                  (*) writeln; (*)

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

                             {$ifOpt Y+} .... {$endif}

              Рассмотрим фрагмент

                            (*) writeln; {*) readln; {*}

              Если выполнена директива Y-, то фрагмент будет интерпретиро-
         ван в качестве последовательности:

                 комментарий           ") writeln; {"
                 оператор                 readln;
                 комментарий                "*"

              Если выполнена директива Y+, то фрагмент будет интерпретиро-
         ван в качестве последовательности:

                 комментарий                (*)
                 оператор                 writeln;
                 комментарий           "*) readln; {*"

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

                        {$ifOpt Y+} ... {$else} ... {$endif}

         UniPASCAL-2 - Управление компиляцией                            9
         -----------------------------------------------------------------


              2.2.  Директивы с параметром

              Единственной директивой с параметром транслятора UniPASCAL
         является директива включения в исходный файл дополнительного
         файла.

              Синтаксис: {$I <полное_имя_включаемого_файла>}

              При применении директивы включения дополнительного файла
         следует соблюдать следующие ограничения:

                - вложение директивы допускается до четвертого уровня;
                - тело каждой процедуры и функции должно находится
         полностью в одном файле;
                - один комментарий должен находиться полностью в одном
         файле.



              2.3.  Директивы условной компиляции

              Идея условной компиляции состоит в том, что определенный
         фрагмент исходной программы компилируется только в случае
         выполнения некоторого условия. Идея и соответствующие механизмы
         хорошо известны программистам, имеющим опыта работы на языке
         ассемблера или Turbo Pascal для компьютеров типа IBM-PC-XT/AT.



              2.3.1. Директивы DEFINE и UNDEF

              Директивы предназначены для определения и удаления
         идентификаторов условной компиляции (ИУК) и имеют синтаксис:

                   {$define <идентификатор_условной_компиляции>}
                   {$undef  <идентификатор_условной_компиляции>}

              Одним из возможных условий компиляции программного фрагмента
         является определение или неопределение ИУК - т.е. является или не
         является указанный идентификатор идентификатором условной
         компиляции.

              В одной программе могут быть определены одновременно не более
         восьми идентификаторов условной компиляции.

              ИУК рассматриваются компилятором совершенно отдельно от
         остальных идентификаторов в тексте программы. Поэтому ИУК может
         совпадать по написанию с другим, нормальным идентификатором в
         программе.

              Для компилятора UniPASCAL по умолчанию определен
         идентификатор условной компиляции UniPas.

         10                           UniPASCAL-2 - Управление компиляцией
         -----------------------------------------------------------------


              2.3.2.  Директивы IFDEF, IFNDEF, IFOPT, ELSE и ENDIF

              Условная компиляция осуществляется при помощи конструкции
         типа:

         {$IFxxx <условие>}
            {компилируемый в случае выполнения условия фрагмент программы}
         {$ENDIF}

         или

         {$IFxxx <условие>}
            {компилируемый в случае выполнения условия фрагмент программы}
         {$ELSE}
            {компилируемый в случае невыполнения условия фрагмент}
         {$ENDIF}

         где IFxxx одна из директив IFDEF, IFNDEF или IFOPT.

              При применении директивы IFDEF условие представляет собой
         идентификатор условной компиляции и считается выполненным, если
         идентификатор определен (см.  директивы DEFINE, UNDEF).


              При применении директивы IFNDEF условие представляет собой
         идентификатор условной компиляции и считается выполненным, если
         идентификатор НЕ определен (см.  директивы DEFINE, UNDEF).

              При применении директивы IFОРТ условие представляет собой
         идентификатор переключающей директивы и соответствующий ключ ("+"
         или "-") и считается выполненным, если директива находится в
         указанном состоянии (см. 2.1.).

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

         .................
         {$IFOPT I-}
            writeln("Проверка результата ввода/вывода не производится!")
         {$endif}
         {$IFDEF turn_on}
            writeln("Идентификатор Turn_on определен!")
         {$else}
            writeln("Идентификатор Turn_on неопределен!")
         {$endif}
         .........

         UniPASCAL-2 - Диагностические сообщения компилятора            11
         -----------------------------------------------------------------


              3.  ДИАГНОСТИЧЕСКИЕ СООБЩЕНИЯ КОМПИЛЯТОРА

              Ошибки, обнаруживаемые в процессе компиляции можно разделить
         на три группы:

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

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

              - фатальные ошибки - после обнаружения такой ошибки компиля-
         ция прекращается.  Ошибки этой группы имеют номера с 240 по 255.

              Если когда нибуть во время компиляции получите диагностичес-
         кое сообщение с номером ошибки вне интервала [1..255] настойчиво
         просим выслать в адрес НИПЛ"Програмно осигуряване" программный
         текст в процессе компиляции которого получено такое сообщение.

              Следует особо отметить, что язык программирования UniPASCAL,
         реализованный описываемым компилятором, является расширением ISO-
         стандартного языка и некоторые ошибки, заданные стандартом, явля-
         ются вполне приемлемыми конструкциями.

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

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




              3.1.  Ошибки, не влияющие на процесс компиляции


         1: Compiler directive must not exceed source line
            Директива управления компиляцией должна полностью помещаться в
            одной строке исходного текста

         2: Invalid compiler directive
            Несуществующая директива управления компиляцией

         3: Error in compiler directive
            Ошибка в директиве управления компиляцией
               Например, {$R*} вместо{$R+}

         12            UniPASCAL-2 - Диагностические сообщения компилятора
         -----------------------------------------------------------------


         4: This directive must appear at top of program
            Эту директиву можно ввести только в начале программы
               (до появления ключевого слова program)

         5: Pointer must be dereferenced probably
            Вероятное использование переменной типа указателя
                (но не обнаружен разделитель ^)

         7: Word/Byte standard proc/func mismatched
            Изпользована стандартная процедура или функция для работы с
            байтами, но ее параметры не пакетированы, или наоборот.

         8: Fill with too large size
            Изпользована  процедура FillChar или FillWord и заданная длина
            превышает длину заполняемого участка.

         13: Invalid character in text
             Неправильный символ в тексте программы.
               Вероятнее всего найден символ с ASCII-кодом меньше $20 или
               больше $7Е. Символ игнорируется.





              3.2.  Нефатальные ошибки


         14: Digit expected
             Ожидается (но не найдена) цифра.

         15: Integer [0..255] expected
             Ожидается (но не найдено) целое число в диапазоне [0..255].

         16: Integer expected
             Ожидается (но не найдено) целое число.

         17: 'program' expected
             Ожидается (но не найдено) ключевое слово "program"

         18: 'unit' expected
             Ожидается (но не найдено) ключевое слово "unit"

         19: 'interface' expected
             Ожидается (но не найдено) ключевое слово "interface"

         20: 'implementation' expected
             Ожидается (но не найдено) ключевое слово "implementation"

         21: 'begin' expected
             Ожидается (но не найдено) ключевое слово "begin"

         22: 'do' expected
             Ожидается (но не найдено) ключевое слово "do"

         UniPASCAL-2 - Диагностические сообщения компилятора            13
         -----------------------------------------------------------------


         23: 'downto' expected
             Ожидается (но не найдено) ключевое слово "downto"

         24: 'end' expected
             Ожидается (но не найдено) ключевое слово "end"

         25: 'of' expected
             Ожидается (но не найдено) ключевое слово "of"

         26: 'then' expected
             Ожидается (но не найдено) ключевое слово "then"

         27: 'to' expected
             Ожидается (но не найдено) ключевое слово "to"

         28: 'until' expected
             Ожидается (но не найдено) ключевое слово "until"

         29: 'procedure' or 'function' expected
             Ожидается (но не найдено) ключевое слово "procedure" или
             "function"

         32: Error in integer or real number
             Ошибка в численной константе (целой или реальной)

         36: Label (integer or identifier) expected
             Ожидается (но не найдена) метка (идентификатор или число)

         37: ':' or ',' expected
             Ожидается (но не найден) символ ":" или ","

         38: 'begin' or declarations expected
             Ожидается (но не найдено) ключевое слово "begin" или
             определение

         39: '=' expected
             Ожидается (но не найден) символ "="

         40: ':=' expected
             Ожидается (но не найден) символ ":="

         41: '..' expected
             Ожидается (но не найден) символ ".."

         42: '.' expected
             Ожидается (но не найден) символ "."

         43: '[' expected
             Ожидается (но не найден) символ "["

         44: ']' expected
             Ожидается (но не найден) символ "]"

         14            UniPASCAL-2 - Диагностические сообщения компилятора
         -----------------------------------------------------------------


         45: '(' expected
             Ожидается (но не найден) символ "("

         46: ')' expected
             Ожидается (но не найден) символ ")"

         47: ';' expected
             Ожидается (но не найден) символ ";"

         48: ':' expected
             Ожидается (но не найден) символ ":"

         49: ',' expected
             Ожидается (но не найден) символ ","

         50: Identifier expected
             Ожидается (но не найден) идентификатор

         51: Error in declaration part
             Ошибка в части определения (декларативной части)

         52: Identifier redeclaration
             Попытка повторного определения идентификатора

         53: Error in type
             Ошибка при определении типа

         54: Error in simple type
             Ошибка в простом типе (simple type)

         55: String size in range '1..255' expected
             Ожидается (но не найдена) целочисленная константа в диапазоне
             [1..255] для определения длины строки символов

         56: Subrange bounds must be scalar
             Границы диспазонного типа должны быть простого типа

         57: Low bound exceeds high bound
             Нижняя граница диапазонного типа больше верхней границы.

         58: Incompatible subrange types
             Несовместимые типы границ

         59: Undeclared forward procedure or function
             Неопределенная forward-процедура или функция

         60: Unresolved forward reference type
             Неразрешенная ссылка на forward-тип
               Вероятнее всего попытка использовать в качестве базы
               переменной типа указателя тип, который не описан в той-же
               самой type-секции.

         61: This type can't be used as an index type
             Этот тип не может быть использован в качестве индексного типа

         UniPASCAL-2 - Диагностические сообщения компилятора            15
         -----------------------------------------------------------------

         62: Files not allowed here
             Указание файлов здесь не разрешено.
               Вероятнее всего попытка указать файл в качестве элемента
               массива или записи.

         63: Previous declaration was not forward
             Предыдущее определение не типа forward.
               Попытка применить в качестве идентификатора процедуры или
               функции уже определенный идентификатор

         64: A forward declared function type mismatch
             Ошибка при определении типа forward-заданной функции

         65: Function type must be scalar, subrange or pointer
             Тип функции должен быть простой, диапазон или указатель
               (в частности не разрешены массивы, записи или строки).

         66: Missing result type in function declaration
             При определении функции не указан тип результата

         67: Interface procedure redeclaration
             Попытка повторного определения интерфейсной процедуры

         68: Forward redeclaration
             Попытка повторного forward-определения процедуры

         71: Header doesn't match previous declaration
             Заголовок (процедуры или функции) не соответствует ранее
             данному определению

         72: Error in parameter list
             Ошибка в списке параметров

         73: Only variable file parameters allowed
             В качестве параметров файла разрешено использование только
             переменных

         74: External files allowed only in programs
             Указание внешних файлов разрешено только в заголовках программ
             (но не и модулей)

         75: Not a standard file
             Заданный параметр не является стандартным файлом

         76: Tag field type must be scalar or subrange
             Переменное поле файла (tag field) должно быть простого типа

         77: Incompatible with tag field type
             Несоответствие типу переменного поля (tag field)

         78: Error in field list
             Ошибка в списке полей записи

         79: Set base type must be subrange
             Базовый тип множества должен быть простым

         16            UniPASCAL-2 - Диагностические сообщения компилятора
         -----------------------------------------------------------------

         80: Forward procedures and functions not allowed in interface
             Не разрешено опережающее (foward) определение процедур и
             функции в интерфейсной части модуля

         81: Forward declaration was/wasn't segment
             Опережающее определение процедуры или функции не соответствует
             текущему в отношении сегментности (создании перекривающих
             oveflay процедур)

         84: Labels must be in the range 0..9999
             Метки должны быть в диапазоне [0..9999]

         85: Reserved name used as a label
             Попытка применить зарезервированное имя в качестве метки

         86: Label redeclaration
             Попытка повторного определения метки

         87: Labels not allowed in interface part
             Использование меток не разрешено в интерфейсных частях модулей

         95: Undefined label
             Неопределенная метка

         96: Undeclared label
             Недекларированная метка

         97: Label redeclaration
             Попытка порторной декларации метки

         98: Label expected
             Ожидается (но не найден) метка

         99: Illegal label
             Неправильная метка

         100: Error in factor
              Ошибка в арифметическом или логическом выражении
              (factor по РБНФ).

         101: Error in variable
              Ошибка при применении переменной

         102: Boolean expected
              Ожидается (но не найдено) выражение типа Boolean

         103: Scalar or subrange type expected
              Ожидается (но не найдено) выражение типа Scalar или subrange

         104: Duplicate constant in case statement
              Дублирование константы в case-операторе

         105: Constant type incompatible with selecting expression
              Тип константы не совпадает с типом выражения выбора в
              case-операторе

         UniPASCAL-2 - Диагностические сообщения компилятора            17
         -----------------------------------------------------------------

         106: Scalar or SubRange expected
              Ожидается выражение типа Scalar или SubRange

         107: Type of set elements must be compatible
              Элементы множества должны быть совместимыми по типу

         108: Lo bound exceeds hi bound
              Нижная граница превышает верхную

         109: Too many labels in one statement
              Много меток в одном операторе
                При необходимости применяйте пустой оператор. Например,
                вместо неправильного Lab1: Lab2: Lab3: ...
                используйте правильное Lab1: ; Lab2: ; Lab3: ...

         110: Boolean expression expected
              Ожидается (но не найдено) выражение типа Boolean

         111: FOR loop control variable
              Переменная управления цикла FOR
              (должна быть локальной для текущей процедуры)

         112: Illegal type of FOR loop control variable
              Неправильный тип переменной управления FOR-цикла

         113: Illegal type of expression
              Неправильный тип выражения

         114: Type conflict (incompatible with control loop variable)
              Несовпадение типов (тип выражение не сопадает с типом
              переменной управления цикла)

         115: Structure is not byte packed
              Структура не является пакетированной на границе байта

         116: Incompatible with left side variable
              Несовместимость (по типу) с переменной левой части оператора
              присваивания

         117: Goto over EXIT:
              Переход через EXIT
              (Попытка при помощи GOTО передать управление из завершающей
              части процедуры, функции, программы или модуля в тело)

         118: Illegal type of variable
              Неправильный тип переменнной

         121: No such variant in this record
              Нет такого варианта в этой записи

         123: Incompatible with tag field
              Несовместимость с переменным полем записи

         139: Type of variable is not a pointer
              Переменная не является указателем

         18            UniPASCAL-2 - Диагностические сообщения компилятора
         -----------------------------------------------------------------

         140: Type of variable is not an array
              Переменная не является массивом

         141: Index type must be scalar or subrange
              Тип индекса должен быть scalar или subrange

         142: Index type incompatible with declaration
              Тип индекса не совпадает с декларацией

         143: Type of variable is not a record
              Тип переменной не является записью

         144: No such field in this record
              Нет такого поля в этой записи

         145: Expression is not of set type
              Выражение не обладает типом множества

         146: String constant has differ length
              Константа типа строки имеет неправильную длину

         148: Can't handle this packed file
              Невозможно обработать этот пакетированный файл

         149: Text files not allowed
              Не разрешено применение текстового файла (в качестве
              параметра)

         150: Assignment to this function not allowed here
              Не разрешено в этом месте присваивать значение этой функции
              (Вероятнее всего нарушение правил вложенности)

         151: Result value is not allowed in procedures
              Процедуры не имеют имплицитного результата

         152: Must specify return value for functions
              Возвращаемое функцией значение должно быть определено
              (хотя бы так return())

         153: Untyped file expected
              Файл должен быть нетипизированным

         155: File variable expected
              Ожидается (но не найдена) переменная типа файла

         156: Type of expression is not compatible with expected type
              Неправильный тип выражения

         157: Error in type standard procedure parameter
              Неправильный тип параметра стандартной процедуры

         158: Illegal type operands
              Неправильный тип операндов

         UniPASCAL-2 - Диагностические сообщения компилятора            19
         -----------------------------------------------------------------

         159: Type conflict of operands
              Несовместимые по типу операнды

         160: Test on equality allowed only
              Разрешена только проверка на равенство

         161: Number of parameter does not agree with declaration
              Число параметров не совпадает с заданным в декларации

         162: Actual parameter must be a variable
              Фактический параметр должен быть переменной

         163: Incompatible with formal parameter's type
              Несоответствие типу формального параметра

         164: Scalar or subrange type expected
              Необходим тип scalar или subrange

         165: Incompatible with parameter's size
              Несовместимость с размером (формального) параметра

         166: Strict inclusion not allowed
              Проверка на стргое включение не разрешена

         170: Typed file expected
              Ожидается переменная типа типизированного файла

         171: Integer expression expected.
              Ожидается целочисленное выражение

         172: Can't read or write variables of this type
              Невозможно читать или писать переменные этого типа
                 Вероятнее всего попытка применения массива или записи в
                 операторах read, readln, write, writeln. Каждый элемент
                 должен быть обработан в отдельности.

         173: Text file expected (readln, writeln)
              Ожидается переменная типа текстового файла (для операторов
              readln, writeln)

         183: Error in factor (bad expression)
              Ожибка в факторе (неправильное выражение)

         184: Incompatible or illegal type of operand
              Несовместимый или неправильный тип операндов
              (бинарной опеарции)

         185: Division by zero
              Нулевое значение знаменателя

         186: Illegal type of constant
              Неправильный тип константы

         187: Constant out of range
              Недопустимое значение константы

         20            UniPASCAL-2 - Диагностические сообщения компилятора
         -----------------------------------------------------------------


         190: Subrange of LongInt not supported
              Настоящая версия не позволяет применение диапазона типа
              LongInt

         191: Constant comparisons not supported
              Настоящая версия не позволяет сравнение констант (в разделе
              декларации)

         192: Constant routines not supported
              Настоящая версия не позволяет применение этой стандартной
              функции с константным параметром (в разделе декларации)

         193: Real constant expressions not supported
              Настоящая версия не позволяет применение выражений с участием
              реальных констант (в разделе декларации)

         194: Structure too long
              Размер структуры больше допустимого (64 Kbytes)

         195: Set base type out of range [0..255]
              Базовый тип множества вне интервала [0..255]

         211: Identifier is not of the appropriate class
              Идентификатор неправильного класса

         212: Undeclared Identifer
              Недекларированный идентификатор

         213: Unvisible Identifier
              Неразличимый идентификатор
                 Идентификатор определен в не менее двух модулях -
                 необходимо указать точно в каком из модулей будет
                 использован

         214: Illegal symbol (possibly missing ';' on line above)
              Неправильный символ (вероятно в предыдущей строке пропущен
              символ ";")

         215: Constant not allowed here
              Здесь не разрешено использование константы

         227: Constant out of range
              Недопустимое значение константы

         228: String constant exceeds source line
              Константа типа строки длиннее исходной строки

         229: String constant too long
              Константа типа строки длиннее 255 символов

         230: Procedure too long
              Недопустимо длинная процедура
                  Разделите ее на две части.

         UniPASCAL-2 - Диагностические сообщения компилятора            21
         -----------------------------------------------------------------

         231: Too many (or too long) long constants
              Общая длина "длинных" констант больше 32 Kbytes
                 Совет - организуйте обработку одной из них в качестве
                 файла

         232: Too many procedures or functions
              Число процедур или функций больше 255.
                 Совет - обявить часть процедур с вложенными процедурами
                 сегментными или разделить программу на модули

         234: Too long segment
              Сенгмент длиннее допустимого
                 Совет - разделить его на два сегмента или модуля

         235: Too many segments
              Число сегментов больше 255
                 Совет - объединить некоторые из них. Если и это не
                 помагает, значить общее число процедур и функции больше
                 25000. Следует обдумать заново всю программу. В этом виде
                 ее нельзя выполнить на компьютере "Пылдин 601/601А".

         237: {$endif} expected
              Ожидается (но не найдена) директива {$endif}, закрывающая
              тело директивы типа {$IFxxx}

         238: Too many conditional symbols defined
              Обявлены более 8 символов условной компиляции

         239: Missplaced conditional directive
              Неправильное применение директивы условной компиляции






              3.3.  Фатальные ошибки


         240: Error in compiler include option
              Неправильная директива включения внешнего файла (include)

         241: Include files not allowed here
              Использование директивы включение файла здесь не разрешено
              (перед ключевого слова "program")

         242: Include files too nested
              Попытка осуществить больше 4 включений файлов

         243: Comment not closed
              Неоконченный комментарий

         244: Error in symbol table
              Ошибка в таблице символов
                 Совет - перекомпилировать соответствующий модуль

         22            UniPASCAL-2 - Диагностические сообщения компилятора
         -----------------------------------------------------------------

         245: Error in date time of interface
              Ошибка в дате или времени связи
                 Вероятное всего некоторый модуль был перекомпилированным,
                 а использующие его модули - нет.

         246: Error reading symbol table
              Ошибка при вводе символьной таблицы
                 Вероятнее всего ошибка технического устройства -
                 перекомпилируйте модуль.

         247: Can't find symbol table
              Невозможно найти таблицу символов ( .sym файл)
                 Совет - перекомпилируйте модуль.

         248: Can't write code file
              Невозможно записать выходной (.pgm или .bdy или .sym) файл
                 Совет - проверьте есть ли на дискете свободного места.
                 Если да - технический сбой устройства.

         249: Can't open code file
              Невозможно открыть выходной (.pgm или .bdy или .sym) файл
                 Совет - проверьте есть ли на дискете свободного места.
                 Если да - технический сбой устройства.

         250: Include file not found
              Не найден файл для включения в исходный файл
                 Проверьте указали ли ПОЛНОЕ имя файла (с расширением и,
                 если необходимо, с логическим устройством, директории и
                 т.д.)

         252: Phisycal end of proc/func text encountared before logical
              Физический конец процедуры/функции найден перед логическим
              окончанием
                 Процедура или функция должна быть записана ПОЛНОСТЬЮ в
                 одном исходном/включаемом файле

         253: Can't read source file. (I/O error)
              Невозможно прочитать исходный файл (ошибка ввода/вывода)
                 Вероятнее всего - технический сбой.

         254: Source line too long
              Длина строки исходного файла больше 128 символов

         255: Phisycal end of program/unit text encountared before logical
              Физический конец программы/модуля найден перед логическим
              окончанием.

         UniPASCAL-2 - Диагностические сообщения интерпретатора         23
         -----------------------------------------------------------------

              4.  Диагностические сообщения интерпретатора


           1: Insufficient room in memory
              Недостаточная свободная память (для выполнения программы)
                 Совет - разделите программу на перекрывающиеся модули.

           2: Input/Output error
              Ошибка ввода/вывода

           3: Division by zero
              Нулевое значение знаменателя

           4: String overflow
              Переполнение строки символов

           5: Element's number out of range
              Номер элемента множества вне интервала [0..255]

           6: Lo bound exceeds hi bound
              Нижная граница множества превышает верхную

           7: Bad string index
              Неправильное индексирование переменной типа строки

          65: Floating point overflow
              Переполнение при расчетах с плавающей точкой

          66: Invalid floating point operation
              Неправильная операция или операнд с плавающей точкой

          67: Floating point division by zero
              Нулевое значение знаменателя при делении с плавающей точкой

          68: Integer overflow
              Переполнение при превращении реального числа в целое

         209: Error reading code file
              Ошибка при вводе исполнимого файла
                 Вероятнее всего - технический сбой.

         210: Module not found
              Нет выполнимого кода указанного модуля

         211: Segment not found
              Не найден файл сегмента
                 Проверьте не поменяли ли дискету во время выполнения.

         212: Incorrect program version
              Неправильная версия программы/модуля