Spec-Zone.ru › Ada 2022
Руководство по Ada (Ada 2022)

4.5 Операторы и вычисление выражений

Язык определяет следующие шесть категорий операторов (в порядке возрастания приоритета). Соответствующие символы_операторов, и только они, могут использоваться в качестве идентификаторов в объявлениях функций для пользовательских операторов. См. 6.6, «Перегрузка операторов».

Синтаксис

logical_operator ::= and | or | xor
relational_operator ::= = | /= | < | <= | > | >=
binary_adding_operator ::= + | – | &
unary_adding_operator ::= + | –
multiplying_operator ::= * | / | mod | rem
highest_precedence_operator ::= ** | abs | not

Статическая семантика

Для последовательности операторов одного уровня приоритета, операторы связываются со своими операндами в текстовом порядке слева направо. Скобки могут использоваться для навязывания конкретных связей.
Для каждой формы определения типа, некоторые из вышеперечисленных операторов являются предварительно определёнными; то есть, они неявно объявляются сразу после определения типа. Для каждого такого неявного объявления оператора, параметры называются Left и Right для бинарных операторов; единственный параметр называется Right для унарных операторов. Выражение вида X op Y, где op — бинарный оператор, эквивалентно вызову функции вида "op"(X, Y). Выражение вида op Y, где op — унарный оператор, эквивалентно вызову функции вида "op"(Y). Предварительно определённые операторы и их эффекты описаны в подразделах 4.5.1 по 4.5.6.

Динамическая семантика

Предварительно определённые операции над целочисленными типами либо возвращают математически правильный результат, либо возбуждают исключение Constraint_Error. Для реализаций, поддерживающих Приложение к Numerics, предварительно определённые операции над вещественными типами возвращают результаты, точность которых определена в Приложении G, или возбуждают исключение Constraint_Error.

Требования к реализации

Реализация предварительно определённого оператора, возвращающего результат целочисленного или фиксированного типа, может возбудить Constraint_Error только если результат находится вне базового диапазона типа результата.
Реализация предварительно определённого оператора, возвращающего результат с плавающей точкой, может возбудить Constraint_Error только если результат находится вне безопасного диапазона типа результата.

Разрешения для реализации

Для последовательности предварительно определённых операторов одного уровня приоритета (и при отсутствии скобок, навязывающих конкретную ассоциацию), реализация может навязать любую ассоциацию операторов с операндами, при условии, что результат, полученный в результате ассоциации слева направо, является допустимым результатом, но игнорируя потенциальную возможность сбоя языка-определенных проверок как в ассоциации слева направо, так и в выбранном порядке ассоциации.
ПРИМЕЧАНИЕ Два операнда выражения вида X op Y, где op — бинарный оператор, оцениваются в произвольном порядке, как и для любого вызова функции function_call (см. 6.4).

Примеры

Примеры приоритета:
not Sunny or Warm -- то же, что (not Sunny) or Warm
X > 4.0 and Y > 0.0 -- то же, что (X > 4.0) and (Y > 0.0)
-4.0*A**2 -- то же, что –(4.0 * (A**2))
abs(1 + A) + B -- то же, что (abs (1 + A)) + B
Y**(-3) -- скобки необходимы
A / B * C -- то же, что (A/B)*C
A + (B + C) -- вычислить B + C перед добавлением к A


Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API