Выражение состоит из констант, переменных, имен функций, знаков операций и скобок. Выражение задает правило вычисления некоторого значения. Порядок вычисления определяется старшинством (приоритетом) содержащихся в нем операций. В языке Object Pascal принят следующий приоритет операций:
1. унарная операция not, унарный минус -, взятие адреса @
2. операции типа умножения * / div mod and shl shr
3. операции типа сложения + - or xor
4. операции отношения = <> < > <= >= in
Выражения входят в состав многих операторов языка Object Pascal, а также могут быть аргументами подпрограмм.
Комментарии в Object Pascal это текст, который поясняет смысл работы алгоритма программы, а также могут использоваться для исключения из компиляции части текста программы, без удаления самого текста. Они могут находиться в любом месте программы.
Существуют два способа записи комментарий:
(* текст *) или { текст } – позволяет создать многострочный комментарий. Комментарии (**) и {} могут быть вложены друг в друга, но не сами в себя.
// текст – позволяет создать однострочный комментарий. Может быть вложен в (**) или {}.
Директивы компилятора предназначены для контроля процесса компиляции.
Синтаксис: {$директива}
Object Pascal содержит следующие основные директивы.
{$INCLUDE ‘1.txt’} – текст из файла ‘1.txt’ вставляется вместо директивы в программу и компилируется как часть программы.
{$RESOURCE ‘App.res’}
или
{$R ‘App.res’} – двоичные ресурсы из файла ‘App.res’ после компиляции включаются в исполняемый файл.
Директивы режима компиляции - позволяют использовать различные настройки компиляции в разных частях программы.
Например
{$WARNINGS OFF} – отключить предупреждающие сообщения при компиляции.
Директивы условной компиляции – позволяют в зависимости от настроек компилировать различные части программы.
Структура:
{$IF Defined(name)}
текст программы, компилируемый, если определено имя name
{$ELSEIF Version > 2.0 }
текст программы, компилируемый, если константа Version > 2.0
{$ELSE}
текст программы, компилируемый, в другом случае
{$IFEND}
Чтобы определить или удалить имя используются директивы:
{$DEFINE name} – определяет имя name
{$UNDEF name} – удаляет имя name
В математике принято классифицировать переменные в соответствии с некоторыми важными характеристиками. Производится строгое разграничение между вещественными, комплексными и логическими переменными, между переменными, представляющими отдельные значения и множество значений и так далее.
При обработке данных на ЭВМ такая классификация еще более важна. В любом алгоритмическом языке каждая константа, переменная, выражение или функция бывают определенного типа.
В языке Object Pascal существует правило: тип явно задается в описании переменной или функции, которое предшествует их использованию. Концепция типа языка Object Pascal имеет следующие основные свойства:
- любой тип данных определяет множество значений, к которому принадлежит константа, которые может принимать переменная или выражение, или вырабатывать операция или функция;
- тип значения, задаваемого константой, переменной или выражением, можно определить по их виду или описанию;
- каждая операция или функция требует аргументов фиксированного типа и выдает результат фиксированного типа.
Отсюда следует, что транслятор может использовать информацию о типах для проверки вычислимости и правильности различных конструкций.
Тип определяет:
-возможные значения переменных, констант, функций, выражений, принадлежащих к данному типу;
-внутреннюю форму представления данных в ЭВМ;
-операции и функции, которые могут выполняться над величинами, принадлежащими к данному типу.
Обязательное описание типа приводит к избыточности в тексте программ, но такая избыточность является важным вспомогательным средством разработки программ и рассматривается как необходимое свойство современных алгоритмических языков высокого уровня.
В языке Object Pascal существуют простые и структурированные типы данных, а также еще несколько видов типов данных, которые по своим свойствам не относятся ни к тем, ни к другим. Типы данных также классифицируются на стандартные и определяемые. Стандартные типы можно сразу использовать для объявления переменных. Для определяемых типов, их параметры и структуру необходимо сначала описать в разделе объявления типа и затем использовать для объявления переменных.
Простые
Порядковые
Целый Стандартный (С)
Символьный С
Логический С
Перечисляемый Определяемый (О)
Интервальный О
Вещественный С
Структурированные
Массив О
Запись О
Множество О
Файл С или О
Класс О
Строковой С
Адресный (указатель) С или О
Процедурный О
Изменяемый (Variant) С
Для любого типа данных или переменной применима стандартная функция SizeOf(<имя_типа>|<имя_переменной>), которая возвращает количество байт требуемое для хранения данных указанного типа или типа указанной переменной.
- все возможные значения порядкового типа представляют собой ограниченное упорядоченное множество;
- к любому порядковому типу может быть применена стандартная функция Ord(<имя_типа>), которая в качестве результата возвращает порядковый номер конкретного значения в типе <имя_типа>;
- к любому порядковому типу могут быть применены стандартные функции Pred(<имя_типа>) и Succ(<имя_типа>), которые возвращают предыдущее и последующее значения соответственно;
- к любому порядковому типу могут быть применены стандартные функции Low(<имя_типа>) и High(<имя_типа>), которые возвращают наименьшее и наибольшее значения величин типа <имя_типа>.
Раздел объявления типов:
type
<имя_типа>=<описание_типа>;
[…]
<имя_типа> имя нового определяемого типа данных или синонима для стандартного типа данных.
<описание_типа> зависит от вида объявляемого типа данных.
Например:
type
b=byte;
Тип b будет означать то же, что и стандартный целый тип byte
type
rec=record
a:real;
b:byte;
end;
Тип rec – новый определяемый тип запись, с указанной структурой.