НАУЧНО-ИССЛЕДОВАТЕЛЬСКАЯ И ПРОИЗВОДСТВЕННАЯ ЛАБОРАТОРИЯ
"ПРОГРАМНО ОСИГУРЯВАНЕ"
-------------------------------------------------------
ПЕРСОНАЛЬНЫЙ МИКРОКОМПЬЮТЕР
ПЫЛДИН 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
Неправильная версия программы/модуля