Spec-Zone.ru › Ada 2022
Справочник по Ada (Ada 2022)

4.4 Выражения

Выражение — это формула, определяющая вычисление или получение значения. В этом Справочнике термин «выражение» относится к конструкции синтаксической категории expression или любой из следующих категорий: choice_expression, choice_relation, relation, simple_expression, term, factor, primary, conditional_expression, quantified_expression.

Синтаксис

expression ::=
relation {и relation} | relation {и тогда relation}
| relation {или relation} | relation {или иначе relation}
| relation {исключающее ИЛИ relation}
choice_expression ::=
choice_relation {и choice_relation}
| choice_relation {или choice_relation}
| choice_relation {исключающее ИЛИ choice_relation}
| choice_relation {и затем choice_relation}
| choice_relation {или же choice_relation}
choice_relation ::=
simple_expression [relational_operator simple_expression]
relation ::=
simple_expression [relational_operator simple_expression]
| проверенное_simple_expression [не] в membership_choice_list
| raise_expression
membership_choice_list ::= membership_choice {'|' membership_choice}
membership_choice ::= выбор_simple_expression | range | subtype_mark
simple_expression ::=
[unary_adding_operator] term {binary_adding_operator term}
term ::= factor {multiplying_operator factor}
factor ::= primary [** primary] | abs primary | не primary
primary ::=
numeric_literal | null | string_literal | aggregate
| name | allocator | (expression)
| (conditional_expression) | (quantified_expression)
| (declare_expression)

Правила разрешения имен

Используемое в качестве primary имя name должно соответствовать объекту или значению.

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

Каждое выражение имеет тип; он определяет вычисление или получение значения этого типа.
primary , которое является выражением expression, заключённым в ( и ), называется выражением в скобках.
Каждое имя name или выражение expression состоит из одного или нескольких оперативных составляющих имен name или выражений expression, только одна из которых вычисляется в ходе вычисления имени name или выражения expression (вычисляемая оперативная составляющая). Оперативные составляющие определяются следующим образом, в зависимости от формы выражения expression (или имени name):
  • если выражение expression является условным выражением conditional_expression, то оперативные составляющие его зависимых выражений dependent_expressions;
  • если выражение expression (или имя name) представляет собой выражение в скобках, квалифицированное выражение qualified_expression или преобразование вида, то оперативные составляющие его операнда;
  • если выражение expression представляет собой выражение объявления declare_expression, то оперативные составляющие его тела body_expression;
  • в противном случае, само выражение expression (или имя name).
В некоторых контекстах мы указываем, что оперативная составляющая должна (или не должна) быть ново созданной. Это означает, что оперативная составляющая должна (или не должна) быть агрегатом aggregate или вызовом функции function_call; в любом случае, допускается выражение повышения raise_expression.

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

Значение primary, которое является именем name, обозначающим объект, равно значению объекта.
Выражение числового универсального типа вычисляется так, как если бы оно имело тип root_integer (для universal_integer) или root_real (в противном случае), если контекст не определяет конкретный тип (в этом случае используется этот тип).

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

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

Примеры

Примеры основных элементов:
4.0 -- вещественная литеральная константа
Pi -- именованное число
(1 .. 10 => 0) -- агрегат массива
Sum -- переменная
Integer'Last -- атрибут
Sine(X) -- вызов функции
Color'(Blue) -- квалифицированное выражение
Real(M*N) -- преобразование
(Line_Count + 10) -- выражение в скобках
Примеры выражений:
Volume -- основной элемент
не Destroyed -- множитель
2*Line_Count -- слагаемое
-4.0 -- простое выражение
-4.0 + A -- простое выражение
B**2 - 4.0*A*C -- простое выражение
R*Sin(θ)*Cos(φ) -- простое выражение
Password(1 .. 3) = "Bwv" -- отношение
Count в Small_Int -- отношение
Count не в Small_Int -- отношение
Index = 0 или Item_Hit -- выражение
(Cold и Sunny) или Warm -- выражение (скобки обязательны)
A**(B**C) -- выражение (скобки обязательны)


Spec-Zone.ru

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