Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Паскаль / tp3 / tp3 / 1

.doc
Скачиваний:
17
Добавлен:
10.12.2013
Размер:
76.8 Кб
Скачать

Часть 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 символов.

Соседние файлы в папке tp3