ЭЛЕКТРОННАЯ БИБЛИОТЕКА КОАПП |
Сборники Художественной, Технической, Справочной, Английской, Нормативной, Исторической, и др. литературы. |
Часть 3 Часть 1. Стандарт Турбо Паскаля Глава 1. Лексемы и константы Лексемы - это минимальные значимые единицы текста в программе, написанной на Паскале. Они представлены такими категориями как специальные символы, идентификаторы, метки, числа и строковые константы. Программа, написанная на Паскале, состоит из лексем и разделителей, причем разделитель представляет собой пробел или комментарий. Две соседних лексемы, если они представляют собой зарезервированное слово, идентификатор, метку или число, должны быть отделены друг от друга одним и несколькими разделителями. Примечание: Разделители не могут быть частью лексем, за исключением строковых констант. Специальные символы и зарезервированные слова Турбо Паскаль использует следующие подмножества набора символов кода ASCII: - Буквы английского алфавита от A до Z и от a до z. - Цифры - арабские цифры от 0 до 9. - Шестнадцатиричные цифры - арабские цифры от 0 до 9, буквы от A до F и буквы от a до f. - Пробелы - символ пробела (ASCII 32) и все управляющие символы кода ASCII (ASCII 0-31), включая символ конца строки или символ возврата каретки (ASCII 13). Далее для буквы, цифры и шестнадцатиричной цифры приведены синтаксические диаграммы. Чтобы прочитать диаграмму, следуйте по стрелкам. Часто встречаются альтернативные пути: путь, начинающийся слева и заканчивающийся стрелкой справа, является допусти мым. Путь пересекает рамки, содержащие имена элементов, используемых для построения этой части синтаксиса. Имена в одинарных рамках должны быть заменены действительными конструкциями. Двойные рамки содержат зарезервированные слова, знаки операций и знаки пунктуации, то есть допустимые термы, используемые в программе. буква ДДДДДДДДВДДДДДДДВДДДДДДДДВДДДДДДДї і і і і ХПё ХПё ХПё ХПё іAі ... іZі іaі ... іzі ФСѕ ФСѕ ФСѕ ФСѕ і і і і АДДДДДДДБДДДДДДДДБДДДДДДДБДДДДДДДДДД цифра ДДВДДДДВДДДДВДДДДВДДДДВДДДДВДДДДВДДДДВДДДДВДДДДї і і і і і і і і і і ХПё ХПё ХПё ХПё ХПё ХПё ХПё ХПё ХПё ХПё і1і і2і і3і і4і і5і і6і і7і і8і і9і і0і ФСѕ ФСѕ ФСѕ ФСѕ ФСѕ ФСѕ ФСѕ ФСѕ ФСѕ ФСѕ і і і і і і і і і і АДДДДБДДДДБДДДДБДДДДБДДДДБДДДДБДДДДБДДДДБДДДДБДДДД ЪДДДДДДДї шестнадцатиричная ДДДДДДДДі цифра ГДДДДДДДДДДДДДДї цифра і АДДДДДДДЩ і АДВДДДДДДДВДДДДДДВДДДДДДДї і і і і і і ХПё ХПё ХПё ХПё і іaі ... іfі іAі ... іFі і ФСѕ ФСѕ ФСѕ ФСѕ і і і і і і АДДДДДДДБДДДДДДБДДДДДДДБДДДДДБДДДДДДД Специальные символы и зарезеривированные слова представляют собой символы, имеющие одно или несколько фиксированных значений. Специальными символами являются следующие одиночные символы: + - * / = < > [ ] . , ( ) : ; ^ @ { } $ # Следующие пары символов также представляют собой специальные символы: <= >= := .. (* *) (. .) Некоторые специальные символы являются также знаками операций. Левая квадратная скобка ([) эквивалентна паре символов, состоящей из левой круглой скобки и точки ((.). Аналогично правая квадратная скобка (]) эквивалентна паре символов, состоящей из т очки и правой круглой скобки (.)). Следующие слова являются зарезервированными в Турбо Паскале: Таблица 1.1 Зарезервированные слова Турбо Паскаля ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД and export nil string asm file not then array for object to begin function of type case goto or unit const if packed until constructor implementation procedure uses destructor in program var div inline record while do interface repeat with downto label set xor else library shl end mod shr ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД В настоящем руководстве зарезервированные слова записаны строчными буквами. Однако, для Турбо Паскаля безразличен регистр клавиатуры, поэтому вы можете использовать в своей программе как строчные (нижний регистр), так и прописные (верхний регистр) б уквы. Далее приведены стандартные директивы Турбо Паскаля. В отличие от зарезервированных слов, пользователь может их переопределить. Однако делать это не рекомендуется. Таблица 1.2 Стандартные директивы Турбо Паскаля ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД absolute external index near assembler far interrupt private export forward name resident virtual ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД Заметим, что private является зарезервированным словом только внутри объектов. Идентификаторы Идентификаторами обозначаются имена констант, типов, переменных, процедур, модулей, программ и полей в записях. Идентификатор может иметь любую длину, однако только первые его 63 символа являются значимыми. Идентификатор должен начинаться с буквы и не может содержать пробелов. После первого символа идентификатора можно использовать буквы, цифры и символы подч еркивания (значение ASCII $5F). Как и в зарезервированных словах, в идентификаторах можно использовать как строчные, так и прописные буквы (компилятор их не различает). Идентификатор должен начинаться с буквы и не должен содержать пробелов. После первого символа допускаются буквы, цифры и знак подчеркивания (ASCII $5F). Как и зарезервированные слова, идентификаторы безразличны к регистру клавиатуры. Когда имеется несколько мест с указанием одного и того же идентификатора, для задания нужного идентификатора необходимо уточнить этот идентификатор с помощью идентификатора модуля. Например, для уточнения идентификатора Ident с помощью идентификатор а UnitName следует записать UnitName.Ident. Такой комбинированный идентификатор называется уточненным идентификатором. Примечание: Модули описываются в Главе 3 "Руководства пользователя" и в Главе 9 данного руководства. ЪДДДДДї идентификатор ДДДДДібукваГДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДВДД АДДДДДЩ ЪДДДДДї і ГДДДґбукваіДДДДДДДДДДДДДДДґ і АДДДДДЩ і і ЪДДДДДї і ГДДДґцифраіДДДДДДДДДДДДДДДґ і АДДДДДЩ і і ЪДДДДДДДДДДДДДДДДДДДДї і АДДґсимвол подчеркиванияіДЩ АДДДДДДДДДДДДДДДДДДДДЩ ХНё символ подчеркивания ДДДДДДДДДД і_іДДДДДДДДДДДД ФНѕ идентификатор программы ЪДДДДДДДДДДДДДї идентификатор модуля ДДДДДДіидентификаторіДДДДДД идентификатор поля АДДДДДДДДДДДДДЩ ЪДДДДДДДДДДДДДї уточненный ДДВДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДіидентификаторГД идентификаторі АДДДДДДДДДДДДДЩ і ЪДДДДДДДДДДДДДДДДДДДДї ХНё і Аіидентификатор модуляГДі.іДЩ АДДДДДДДДДДДДДДДДДДДДЩ ФНѕ Приведем несколько примеров идентификаторов: Writeln Exit Real2String System.MemAvail Dos.Exec WinCrt.WhereX Метки Меткой является последовательность цифр в диапазоне от 0 до 9999. Начальные нули не являются значащими. Метки используются с операторами перехода goto. ЪДДДДДДДДДДДДДДДДДДДДДДДї метка ДДДВДДДДіпоследовательность цифрГДДДДДДДДДДД і АДДДДДДДДДДДДДДДДДДДДДДДЩ і ЪДДДДДДДДДДДДДї і АДДДДіидентификаторГДДДДДДДДДДДДДДДЩ АДДДДДДДДДДДДДЩ Как расширение стандартного Паскаля, Турбо Паскаль позволяет использовать в качестве меток идентификаторы функций. Числа Для чисел, представляющих собой константы целого и вещественного типа, используется обычная десятичная запись. Целая константа в шестнадцатиричном формате имеет в качестве префикса знак доллара ($). Научное обозначение (E или е с показателем степени ) в вещественных типах читается, как "на десять в степени". Например, 7E- означает 7х10^-2, а 12.25E+6 или 12.25E6 оба обозначают 12.25х10^+6. Синтаксические диаграммы для записи чисел приведены ниже. ЪДДДДДДДДДДДДДДДДДДДДДДДї последовательность ДДДДДДДДДішестнадцатиричная цифраГДДДВД шестнадцатиричных цифр АДДДДДДДДДДДДДДДДДДДДДДДЩ і і і АДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЩ ЪДДДДДї последовательностьДДДДДДДДДДіцифраГДДДДДДДДДДВДДДДДДДДДДД цифр АДДДДДЩ і і і АДДДДДДДДДДДДДДДДДДДДДДДЩ ЪДДДДДДДДДДДДДДДДДДДДДДДї целое без знака ДДВДДДДДіпоследовательность цифріДДДДДДДДД і АДДДДДДДДДДДДДДДДДДДДДДДЩ і ХНё ЪДДДДДДДДДДДДДДДДДДДДДДДДї і АДДДі$іДДДіпоследовательность ГДДЩ ФНѕ ішестнадцатиричных цифр і АДДДДДДДДДДДДДДДДДДДДДДДДЩ ХНё знак ДДДДДДВДДДДі+іДДДДДДДДДДДДДДД і ФНѕ і ХНё і АДДДДі-іДДДДДДДЩ ФНѕ вещественное без знака ЪДДДДДДДДДДї ЪДДДДДДДДДДї ДДДіпоследова-і ХНё іпоследова-і ітельность ГДВДі.іДДітельность ГДВДДДДДДДДДДДДДДДДД іцифр і і ФНѕ іцифр і і АДДДДДДДДДДЩ і АДДДДДДДДДДЩ і і і ЪДДДДДДДДДДї і АДДДДДДДДДДДДДДДДДДДДДДДімасштабныйГДДЩ імножитель і АДДДДДДДДДДЩ ХНё ЪДДДДДДДДДДДДДДДДДДї масштабныйДВДДіEГДДДДДВДДДДДДДДДДДДДіпоследовательностьГДД множитель і ФНѕ і іцифр і і ХНё і і ЪДДДДї і АДДДДДДДДДДДДДДДДДДЩ АДДіeГДДЩ АДДізнакГДДЩ ФНѕ АДДДДЩ ЪДДДДДДДДДДДДДДДї число без знака ДВДДіцелое без знакаГДДДДДДДДДДДДДДДДДДДДД і АДДДДДДДДДДДДДДДЩ і і і ЪДДДДДДДДДДДДДДДДДДДДДДї і АДДдівещественное без знакаГДДДЩ АДДДДДДДДДДДДДДДДДДДДДДЩ ЪДДДДДДДДДДДДДДДї число со знаком ДДВДДДДДДДДДДДДДічисло без знакаіДДДДДДДД і АДДДДДДДДДДДДДДДЩ і ЪДДДДї і АДізнакіДДЩ АДДДДЩ Числа с десятичными точками или показателями степени представляют собой константы вещественного типа. Остальные десятичные числа обозначают константы целого типа. Они должны принимать значения в диапазоне от -2147483648 до 2147483647. Шестнадцатиричные числа обозначают константы целочисленного типа. Они должны находиться в диапазоне от $00000000 до $FFFFFFFF. Окончательный знак значения определяется шестнадцатиричной записью. Строки символов Строка символов представляет собой последовательность, содержащую ноль и более символов из расширенного набора символов кода ASCII (Приложение B), записанную в одной строке программы и заключенную в одиночные кавычки (апострофы). Строка символов, ни чего не содержащая между апострофами, называется нулевой строкой. Два последовательных апострофа в строке символов обозначают один символ - апостроф. Атрибут длины строки символов выражается действительным количеством символов между апострофами. Будучи расширением стандартного Паскаля, Турбо Паскаль разрешает вставлять в строку символов управляющие символы. Символ # с целой константой без знака в диапазоне от 0 до 255 обозначает соответствующий этому значению символ в коде ASCII. Между симв олом # и целой константой не должно быть никаких разделителей. Аналогично, если несколько управляющих символов входит строку символов, то между ними не должно быть разделителей. ХНё ХНё строка символов ДДДДДґ'ГДДДДДДДДДДДДДДДДДДДДґ'ГДДДД ФНѕ ФНѕ і і ЪДДДДДДДДДДДДДДДї і АДДґ символ строки іДДЩ АДДДДДДДДДДДДДДДЩ ЪДДДДДДДДДДДДДДДДДДДДДДДДДДДДДї строчный символ ДДВДДілюбой символ кроме (') или CRГДДДДДД і АДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЩ і ХНё ХНё і АДДДДДДДДДДі'ГДДДДДДДДДДДі'ГДДДДДДДДЩ ФНѕ ФНѕ Строка символов нулевой длины (нулевая строка) допустима только для строковых типов. Строка символов с длиной, равной 1, допустима для любого символьного и строкового типа. Строка символов длиной n, где n больше или равно 2, совместима с любым строк овым типом и упакованным массивом из n символов, а также совместима с типом PChar при разрешении расширенного синтаксиса {$Х+}. Приведем несколько примеров строк символов: 'TURBO' 'You'll see' '''' ';' ' ' #13#10 'Line 1'#13'Line2' #7#7'Make up!'#7#7 Описания констант Описание константы содержит идентификатор, который является обозначением константы внутри блока, содержащего описание. Идентификатор константы не может быть включен в свое собственное описание. ЪДДДДДДДДДДДДДї ХНё ЪДДДДДДДДДї ХНё описание ДДіидентификаторГДДі=ГДДіконстантаГДДі;ГДДД константы АДДДДДДДДДДДДДЩ ФНѕ АДДДДДДДДДЩ ФНѕ ЪДДДДДДДДДДДї константа ДДДДДДДДДДДДДДДДДДДі выражение ГДДДДДДДДДД АДДДДДДДДДДДЩ Являясь расширением стандартного Паскаля, Турбо Паскаль позволяет использовать выражения-константы. Выражение-константа представляет собой выражение, которое может вычисляться компилятором без необходимости выполнения программы. Приведем примеры выр ажений-констант: 100 'A' 256 - 1 (2.5 + 1) / (2.5 - 1) 'Turbo' + '' + 'Pascal' Chr(32) Ord('Z') - Ord('A') + 1 Простейший случай выражения-константы представляет собой простая константа, например 100 или 'A'. В стандартном Паскале допускается использовать только простые константы. В Турбо Паскале разрешено использование выражений-констант. Примечания: Там, где допускается использовать простую константу, допускается использование и выражения-константы. Поскольку компилятор должен иметь возможность полностью вычислить выражение-константу во время компиляции, в качестве выражений-констант не допускается использовать следующие конструкции: - ссылки на переменные и типизованные константы (кроме констант в адресных выражениях, описываемых в Главе 5); - вызовы функций (кроме тех, которые отмечены далее); - оператор получения адреса @ (кроме констант в адресных выражениях, описываемых в Главе 5). За исключением этих ограничений для выражений-констант соблюдаются те же синтаксические правила, что и для обычных выражений (описанных в Главе 6 "Выражения"). В выражениях-константах допускается использовать следующие стандартные фукнции: Abs, Chr, Hi, Length, Lo, Odd, Ord, Pred, Ptr, Round, SizeOf, Succ, Swap, Trunc. Приведем некоторые примеры использования выражений-констант в описаниях констант: const Min = 0; Max = 100; Center = (Max - Min) div 2; Beta = Chr(255); NumChars = Ord('Z') - Ord('A') + 1; Message = 'Out of memory'; ErrStr = 'Error:' + Message + '.'; ErrPos = 80 - Length(Error) div 2; ErrAttr = Blink + Red * 16 + White; Ln10 = 2.302585092994095684; Ln10R = 1 / Ln10; Numeric = ['0'..'9']; Alpha = ['A'..'Z','a'..'z']; AlphaNum = Alpha + Numeric; Комментарии Следующие конструкции представляют собой комментарии и поэтому игнорируются компилятором: { любой текст, не содержащий правую фигурную скобку} (* любой текст, не содержащий звездочку/правую круглую скобку *) Комментарий, содержащий знак доллара ($) сразу после открывающей скобки { или (*, является директивой компилятора. За символом $ следует мнемоника команды компилятора. Примечание: Общее описание директив компилятора дано в Главе 21. Строки программы В Турбо Паскале строки программы имеют максимальную длину в 126 символов. |