- арабские цифры от 0 до 9,
- шестнадцатеричные цифры 0,1,2,...,9,A(a),B(b),...,F(f),
- специальные символы + - * / = , ‘ . : ; < > [ ] ( ) { } ^ @ $ # и пробел,
- составные символы := <> .. <= >= (* *) (вместо {}) (. .) (вместо [])
Неделимые последовательности знаков алфавита образуют слова, которые несут в программе определенный смысл и отделяются друг от друга разделителями. Разделителем может служит пробел и другие символы, комментарий. Слова подразделяются на зарезервированные слова, стандартные идентификаторы и идентификаторы пользователя.
Зарезервированные слова являются составной частью языка, имеют фиксированное значение и определенной начертание. Например, begin end array const if then else ... (всего 69 для ТР 7.0). Зарезервированные слова не могут использоваться в качестве идентификаторов. Исключение составляют заразервированные слова, которые обозначают стандартные директивы (absolute assembler external far forward interrupt near private virtual) и связаны со стандартными объявлениями в программе. Можно переопределить стандартную директиву, т.е. объявить одноименный идентификатор. В среде ТР зарезервированные слова выделяются цветом (либо жирным шрифтом).
Стандартные идентификаторы служат для обозначения заранее определенных разработчиками языка типов данных, констант, процедур и функций.
В модуле Graph константы цвета Black=0, Blue=1,..., тип ТextSettingsType = records с полями Font:Word, Direction:Word, CharSize:Word, Horis:Word, Vert:Word, процедура MoveTo (X, Y: Integer) - смещает текущий указатель к точке X, Y, функция GetMaxX - возвращает максимальную горизонтальную координату графического экрана.
Например, константа MaxInt = 32767 (максимальное целое в типе integer), встроенные функции Sin, Exp. Любой из стандартных идентификаторов можно переопределить. Однако чаще всего это приводит к ошибкам (использование в стандартных модулях).
Идентификаторы пользователя - это имена констант, переменных, меток, типов, объектов, процедур, функций, модулей, программ и полей в записях. Есть правила:
- идентификаторы могут иметь произвольную длину, но значащими (уникальными в области определения) будут только первые 63 символа,
- всегда начинается буквой, за которой могут следовать буквы и цифры (символ подчеркивания считается буквой, пробелы и специальные символы недопустимы),
- имена меток могут начинаться как буквой, так и цифрой
Можно использовать как прописные, так и строчные буквы. Компилятор не делает различий между ними. На практике рекомендуется использовать эту особенность для более простого чтения и понимания значений идентификаторов (MyProgram). Для лучшего восприятия и последующего изменения серьезных программ полезно в имена закладывать смысл, которые несут эти переменные, константы и т.д. (например, обозначение дней недели не просто d, а Days или Dni).
КОНСТАНТЫ И ПЕРЕМЕННЫЕ
Как и другие языки программирования, ТР интерпретирует данные как константы и переменные. Константы и переменные определяются идентификаторами, по которым к ним можно обратиться для получения текущих значений.
Константами называются элементы данных, значения которых установлены в описательной части программы и в процессе выполнения программы не изменяются. Для определения значения констант служит зарезервированное слово Const.
Формат: Const
<идентификатор> = <значение константы>;
Значениями констант в ТР могут быть
- целые числа. Записываются со знаком или без и могут иметь значения от -2 147 483 648 до 2 147 483 647. Если необходимо описать константу выходящую за эти границы, то это нужно делать с использованием десятичной точки и экспоненциальной части, т.е. описывать ее как вещественную.
- вещественные числа. Записываются со знаком или без него, может использоваться десятичная точка и экспоненциальная часть. Экспоненциальная часть начинается символом е(Е), за которой может следовать знак + или - и десятичный порядок.
Например, а = 3.14е5; b = -72Е-3;
Если присутствует десятичная точка, за ней и перед ней д.б. хотя бы одна цифра. Если есть символ е - за ним д.б. хотя одна цифра.
- шестнадцатеричные числа. Состоит из шестнадцатиричных цифр, которым предшествует знак $. Диапазон от $00000000 до $FFFFFFFF.
- логические константы. Это либо слово TRUE (истина), либо FALSE (ложь).
- символы. Любой символ из 8-битной таблицы символов компьютера, включающей и русские буквы, заключенный в апострофы
Например, Znak1 = 'd'; Znak2 = 'ф';
Если необходимо записать сам символ апострофа, то он удваивается ' ' ' '.
Допускается использование записи символа путем указания его внутреннего кода, которому предшестует символ #. Например, #90 - символ Z, #161 - символ б.
- строки символов. Любая последовательность символов (кроме символа CR - возврат каретки), заключенная в апострофы.
Если в строке нужно указать сам символ апострофа - он удваивается. Строка м.б. пустой. Можно составить из кодов нужных символов с предшествуюшими каждому коду знаком #. Можно чередовать запись с помощью самих символов в апострофах с записью кодов.
- конструкторы множеств. Список элементов множества, обрамленный квадратными скобками. Например,
[1,2,4..7,12] [red,blue,green] [true]
- и признак неопределенного указателя NIL.
В отличие от стандартного Паскаля, в ТР разрешается в объявлении констант использовать произвольные выражения, операндами которых могут быть ранее объявленные константы, имена типов и некоторые функции. Например,
Const
Ln10 = 2.3026;
Ln10R = 1 / Ln10;
X = MaxInt div SizeOf(real); (SizeOf - функция, возвращающая количество байт, отведенных на данный тип, Real - 6).
Переменные в отличие от констант могут менять свои значения в процессе выполнения программы. Как и константы, любая переменная принадлежит к определенному типу данных. Но если тип констант распознается компилятором автоматически, то тип переменных должен быть в явном виде описан перед тем, как с переменными будут выполняться какие-либо действия.
Формат: Var
<идентификатор> : <тип>;
Подробнее типы переменных будут рассмотрены позднее.
Существуют типизированные константы, которые являются к.б. промежуточным звеном между переменными и константами. Они описываются в разделе Const. Должен быть указан тип, как у переменных. <идентификатор>:<тип>=<значение>. Типизированная константа равнозначна переменной с заранее определенным значением. Действия над ней могут производиться, как над переменной. Смысл введения типизированных констант заключается в упрощении операции присваивания переменной начального значения, поскольку для любой обычной перменной перед ее использованием необходимо задать ее начальное значение в виде отдельной операции присваивания.
ВЫРАЖЕНИЯ И ОПЕРАЦИИ
Переменные и константы всех типов используются в выражениях. Выражение задает порядок выполнения действий над элементами данных и состоит из операндов (константы, переменные, обращения к функциям), знаков операций и круглых скобок. Операции определяют действия, которые надо выполнить над операндами. В примере (X + Y - 10)*4 X,Y,10,4 – операнды, "+", "-", "*" – знаки операций сложения, вычитания и умножения. Круглые скобки ставятся для управления порядком выполнения операций. Частным случаем выражения может быть одиночный элемент (константа, переменная или обращение к функции).
Операции в языке ТР подразделяются на арифметические, логические (булевские), отношения, строковые, операции с массивами и др. в зависимости от того какого типа операнды в них используются.
Операции могут быть унарные и бинарные. В первом случае операция относится к одному операнду и всегда записывается перед ним, во втором случае операция выражает отношение между двумя операндами и записывается между ними. Унарными операциями являются not (отрицание), @ (создание указателя на переменную), “+” (сохранение знака), “-“ (отрицание знака) (например, -Х, not Y). Последние две операции могут быть и бинарными (X + Y).
Рассмотрим три основных типа операций. Особенности остальных будут описаны при рассмотрении соответствующих типов данных.
Арифметические операции выполняют арифметические действия над значениями операндов целочисленных и вещественных типов.
Операции сложения “+”, вычитания “-“, умножения “*”, деления “/” выполняются как в обычных арифметических действиях. Для операций “+”, “-“, “*”, если операндами являются целые числа (типы Byte, ShortInt, Word, Integer, LongInt), то результат будет относится к целому типу, наименьшему, включающему типы операндов (общий тип). Т.е. X : Byte, Y : Word, Z := X + Y, Z : Word. Для тех же операций, если операнды – вещественные, то результат – Extended (при установленном сопроцессоре, если его нет – то Real). Аналогично, если один из операндов – целое число, а другой – вещественное. Операция деления “/” дает в результате тип Extended как при целых, так и вещественных операндах.
Целочисленное деление div отличается от обычного деления тем, что возвращает целую часть частного, а дробная часть отбрасывается. Оба операнда – целые, результат – общий тип. Примеры, 11 div 5 – результат 2, 2 div 3 – 0.
Деление по модулю mod восстанавливает остаток, полученный при выполнении целочисленного деления. Типы операндов такие же, как у div. Примеры, 11 mod 5 – 1, 2 mod 3 – 2.
Операции сдвига K shl N и K shr N оперируют с двоичным (битовым) представлением целых чисел. Они восстанавливают в качестве результата значение, полученное путем сдвига на N позиций влево или вправо числа К, представленного в двоичном виде. Оперируют с целыми числами, тип результата – общий тип. Например, 2 shl 7. (2)10 = (10)2. Сдвиг влево на 7 позиций приводит к (100000000)2 (освободившиеся младшие разряда заполняются нулями), что равно (256)10. Аналогично, 161 shr 2 дает 40. ((161)10 = 10100001, сдвиг на 2 вправо – (101000)2 = 8 + 32 = (40)10. Биты, которые уходят за край разрядности теряются).