Справочник по Ada 95
4.4 Выражения
Выражение — это формула, которая определяет вычисление или получение значения. В этом международном стандарте термин «выражение» относится к конструкции синтаксической категории выражение или любой из пяти других синтаксических категорий, определённых ниже.
Синтаксис
выражение ::=
отношение {и отношение} | отношение {и тогда отношение}
| отношение {или отношение} | отношение {или иначе отношение}
| отношение {исключающее ИЛИ отношение}
отношение {и отношение} | отношение {и тогда отношение}
| отношение {или отношение} | отношение {или иначе отношение}
| отношение {исключающее ИЛИ отношение}
отношение ::=
простое_выражение [операция_сравнения простое_выражение]
| простое_выражение [не] в диапазон
| простое_выражение [не] в метка_подтипа
простое_выражение [операция_сравнения простое_выражение]
| простое_выражение [не] в диапазон
| простое_выражение [не] в метка_подтипа
простое_выражение ::= [унарный_операция_сложения] член {бинарный_операция_сложения член}
член ::= множитель {операция_умножения множитель}
множитель ::= операнд [** операнд] | abs операнд | не операнд
операнд ::=
числовая_константа | null | строковая_константа | агрегат
| имя | квалифицированное_выражение | аллокатор | (выражение)
числовая_константа | null | строковая_константа | агрегат
| имя | квалифицированное_выражение | аллокатор | (выражение)
Правила разрешения имён
Имя имя, используемое в качестве операнд, должно разрешаться для обозначения объекта или значения.
Статическая семантика
Каждое выражение имеет тип; он определяет вычисление или получение значения этого типа.
Динамическая семантика
Значение операнд, являющегося имя, обозначающего объект, является значением объекта.
Разрешения для реализации
При оценке операнд, который является имя, обозначающим объект без ограниченного числового подтипа, если значение объекта находится вне базового диапазона его типа, реализация может либо вызвать Constraint_Error, либо вернуть значение объекта.
Примеры
Примеры операндов:
4.0 -- вещественная константа
Pi -- именованное число
(1 .. 10 => 0) -- агрегат массива
Sum -- переменная
IntegerLast -- атрибут
Sine(X) -- вызов функции
Color'(Blue) -- квалифицированное выражение
Real(M*N) -- преобразование
(Line_Count + 10) -- выражение в скобках
Pi -- именованное число
(1 .. 10 => 0) -- агрегат массива
Sum -- переменная
IntegerLast -- атрибут
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 -- простое выражение
Password(1 .. 3) = "Bwv" -- отношение
Count в Small_Int -- отношение
Count не в Small_Int -- отношение
Index = 0 или Item_Hit -- выражение
(Cold и Sunny) или Warm -- выражение (скобки обязательны)
A**(B**C) -- выражение (скобки обязательны)
не Destroyed -- множитель
2*Line_Count -- член
-4.0 -- простое выражение
-4.0 + A -- простое выражение
B**2 - 4.0*A*C -- простое выражение
Password(1 .. 3) = "Bwv" -- отношение
Count в Small_Int -- отношение
Count не в Small_Int -- отношение
Index = 0 или Item_Hit -- выражение
(Cold и Sunny) или Warm -- выражение (скобки обязательны)
A**(B**C) -- выражение (скобки обязательны)