- •1.2.5. Лексика, синтаксис и семантика языков программирования
- •2.1. Алфавит языка
- •2.2. Структура программы
- •2.3. Концепция типа для данных
- •2.4. Стандартные типы данных
- •2.5. Перечисляемые и ограниченные типы
- •2.6. Константы
- •2.7. Переменные
- •2.8. Инициализация переменных
- •3.1. Оператор присваивания
- •3.2. Операторы ввода и вывода
- •3.3. Выражения
- •3.4. Составной оператор
- •3.5. Условный оператор
- •3.6. Оператор варианта
- •3.7. Цикл с предусловием
- •3.8. Цикл с постусловием
- •3.9. Цикл с параметром
- •3.10. Операторы завершения цикла
- •3.11. Метки и операторы перехода
3.3. Выражения
Выражение состоит из констант, переменных, указателей функций, знаков операций и скобок. Выражение задает правило вычисления некоторого значения. Порядок вычисления определяется старшинством (приоритетом) содержащихся в нем операций. В языке принят следующий приоритет операций:
-
унарные операции: унарная операция not, унарный минус –, взятие адреса @;
-
мультипликативные операции (операции типа умножения): * / div mod and shl shr;
-
аддитивные операции (операции типа сложения) + – or xor;
-
операции отношения: = <> < > <= >= in.
Выражения входят в состав многих операторов, а также могут быть аргументами встроенных функций.
Перечисленные операции можно разделить на следующие группы:
-
Арифметические.
-
Логические. Логические операции применимы к целым и логическим операндам. Если операнды – целые числа, то результат логической операции – тоже целое число. Битовая или поразрядная арифметика введена для обеспечения возможности работы с двоичными разрядами (битами). Первая группа операций – логические операции not, and, or и xor. Операция not является одноместной, она изменяет каждый бит целого числа на обратный. Операции and, or и xor – двуместные, операнды этих операций – целые величины одинаковой длины. Операции выполняются попарно над всеми двоичными разрядами операндов. Вторая группа операций – это операции сдвига влево shl и сдвига вправо shr: I shl N, I shr N. Эти операции сдвигают двоичную последовательность значения I влево или вправо на N двоичных разрядов. При этом биты, уходящие за пределы разрядной сетки, теряются, а освободившиеся двоичные разряды заполняются нулями. При сдвиге вправо отрицательных значений освободившиеся разряды заполняются единицами. К булевским операндам применимы следующие логические операции: not, and, or, xor.
-
Операция получения адреса операнда @. Эта операция применяется к операнду любого типа и возвращает результат типа Pointer, в котором содержится адрес операнда. Если эта операция применяется к процедуре или функции, ее результатом будет адрес точки входа в эту подпрограмму. Этот адрес можно использовать в подпрограмме, написанной на ассемблере, или во встраиваемых фрагментах (inline-подпрограммах).
-
Операция in, используемая для работы с множествами. У этой операции два операнда. Первый (левый) операнд – выражение любого порядкового типа, второй – множество из элементов того же типа, или идентификатор множественного типа. Если элемент (первый операнд) входит в указанное множество (второй операнд), то результат операции равен true.
3.4. Составной оператор
Это совокупность последовательно выполняемых операторов, заключенных в операторные скобки begin и end:
begin
<оператор 1>;
<оператор 2>;
…
<оператор N>;
end;
Он может потребоваться в тех случаях, когда в соответствии с правилами построения конструкций языка можно использовать один оператор, а требуется выполнить несколько действий.
Отдельные операторы внутри составного оператора отделяются друг от друга точкой с запятой. Так как завершающее оператор слово end не является отдельным предложением, то перед ним точку с запятой можно не ставить. В противном случае компилятор будет считать, что перед словом end стоит пустой оператор.
Составные операторы задают порядок выполнения операторов, являющихся их элементами. Они должны выполняться в том порядке, в котором они записаны. Составные операторы обрабатываются, как один оператор. Операторы заключаются в ограничители begin и end и отделяются друг от друга точкой с запятой.
Пример составного оператора:
begin
Z := X;
X := Y;
Y := Z;
end;
