Этим Вы окажете большую помощь науке и медицине. См. подробнее: http://solidstate.karelia.ru/~yura/pyldin/yura/computing.htm |
НАУЧНО-ИССЛЕДОВАТЕЛЬСКАЯ И ПРОИЗВОДСТВЕННАЯ ЛАБОРАТОРИЯ "ПРОГРАМНО ОСИГУРЯВАНЕ" ------------------------------------------------------- ПЕРСОНАЛЬНЫЙ МИКРОКОМПЬЮТЕР ПЫЛДИН 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 Неправильная версия программы/модуля