
B.Pascal 7 & Objects/LR - 93 -
───────────────────────────────────────────────────────────────────────
Глава 6. Выражения
─────────────────────────────────────────────────────────────────
Выражения состоят из операций и операндов. Большинство опе-
раций в языке Паскаль являются бинарными, то есть содержат два
операнда. Остальные операции являются унарными и содержат только
один операнд. В бинарных операциях используется обычное алгебраи-
ческое представление, например: a+b. В унарных операциях операция
всегда предшествует операнду, например: -b.
В более сложных выражениях порядок, в котором выполняются
операции, соответствует приоритету операций (см. Таблицу 6.1).
Старшинство операций Таблица 6.1
┌────────────────────┬─────────────────────┬────────────────────┐
│ Операция │ Приоритет │ Вид операции │
├────────────────────┼─────────────────────┼────────────────────┤
│ @, not │ первый (высший) │ унарная операция │
├────────────────────┼─────────────────────┼────────────────────┤
│ *, /, div, mod, │ второй │ операция умножения,│
│ and, shl, shr │ │ деления, сдвига... │
├────────────────────┼─────────────────────┼────────────────────┤
│ +, -, or, xor │ третий │ операция сложения │
├────────────────────┼─────────────────────┼────────────────────┤
│ =, <>, <, >, │ четвертый (низший) │ операция отношения │
│ <=, >=, in │ │ │
└────────────────────┴─────────────────────┴────────────────────┘
Для определении старшинства операций имеется три основных
правила:
1. Во-первых, операнд, находящийся между двумя операциями с
различными приоритетами, связывается с операцией, имею-
щей более высокий приоритет.
2. Во-вторых, операция, находящаяся между двумя операциями
с равными приоритетами, связывается с той операцией, ко-
торая находится слева от него.
3. В-третьих, выражение, заключенное в скобки, перед выпол-
нением вычисляется, как отдельный операнд.
Операции с равным приоритетом обычно выполняются слева-нап-
раво, хотя иногда компилятор при генерации оптимального кода мо-
жет переупорядочить операнды.
B.Pascal 7 & Objects/LR - 94 -
Синтаксис выражений
─────────────────────────────────────────────────────────────────
Правила, определяющие порядок выполнения операций, вытекают
из синтаксиса выражений, которые строятся из множителей, термов и
простых выражений.
Множитель имеет следующий синтаксис:
┌───────────────┐
множитель ───┬──────────────>│ ссылка на ├───────────>
│ │ переменную │ ^
│ └───────────────┘ │
│ ┌─────────┐ │
├────>│константа├──────────────────────┤
│ │без знака│ │
│ └─────────┘ │
│ ┌───┐ ┌─────────┐ ┌───┐ │
├────>│ ( ├────>│выражение│───>│ ) ├───┤
│ └───┘ └─────────┘ └───┘ │
│ ┌───┐ ┌─────────┐ │
├────>│not├────>│множитель├────────────┤
│ └───┘ └─────────┘ │
│ ┌────┐ ┌─────────┐ │
├────>│знак├───>│множитель├────────────┤
│ └────┘ └─────────┘ │
│ ┌─────────┐ │
├────>│ вызов ├──────────────────────┤
│ │ функции │ │
│ └─────────┘ │
│ ┌───────────┐ │
├────>│конструктор├────────────────────┤
│ │ множества │ │
│ └───────────┘ │
│ ┌───────────┐ │
├────>│ адресный ├────────────────────┤
│ │ множитель │ │
│ └───────────┘ │
│ ┌──────────────┐ │
└────>│ приведение ├─────────────────┘
│типа значения │
└──────────────┘
Вызов функции активизирует функцию и представляет собой зна-
чения, возвращаемые функцией (см. далее в этой главе раздел "Вы-
зовы функций"). Описатель множества представляет собой значение
множественного типа (см. раздел, озаглавленный, как "Описание
множеств"). Приведение типа изменяет тип значения (см. "Приведе-
ние типа").
Адресный множитель вычисляет адрес переменной, процедуры,
функции или метода. См. раздел "Операция @".
B.Pascal 7 & Objects/LR - 95 -
Беззнаковая константа имеет следующий синтаксис:
┌─────────┐
константа без знака ───┬────>│ число ├─────────────>
│ │без знака│ ^
│ └─────────┘ │
│ ┌──────────┐ │
├────>│символьная├────────┤
│ │ строка │ │
│ └──────────┘ │
│ ┌─────────────┐ │
├────>│идентификатор├─────┤
│ │ константы │ │
│ └─────────────┘ │
│ ┌───┐ │
└────>│nil├───────────────┘
└───┘
Некоторые примеры множителей могут включать в себя:
Х { ссылка на переменную }
@Х { указатель на переменную }