4.4 Expressions
Syntax
Name Resolution Rules
A
name
used as a
primary
shall resolve to denote an object or a value.
A
primary
that is an
expression
surrounded by ( and ) is known as a
parenthesized expression;
the
expression
of a parenthesized expression is the
operand of the parenthesized
expression.
If a parenthesized expression is expected
to be of type
T, the expected type of the operand is
T.
Similarly, if the parenthesized expression is expected to be of some
class of types, the operand of the parenthesized expression is expected
to be of the same class of types.
Static Semantics
Each expression has a type; it specifies the computation
or retrieval of a value of that type.
This paragraph was
deleted.
Every
name
or
expression
consists of one or more
operative constituent names
or
expressions,
only one of which is evaluated as part of evaluating the
name
or
expression
(the
evaluated operative constituent). The operative constituents
are determined as follows, according to the form of the
expression
(or
name):
In certain contexts, we specify that an operative
constituent shall (or shall not) be
newly constructed.
This means the operative constituent shall (or shall not) be an
aggregate
or a
function_call;
in either case, a
raise_expression
is permitted.
An
iterative context
is a context for an
expression
that can be evaluated multiple times,
and includes the following:
Dynamic Semantics
The value of a
primary
that is a
name
denoting an object is the value of the object.
An expression of a numeric universal type is evaluated
as if it has type root_integer (for universal_integer)
or root_real (otherwise) unless the context identifies a specific
type (in which case that type is used).
The evaluation of a parenthesized expression evaluates
the operand of the parenthesized expression, and yields the result of
the operand evaluation.
Implementation Permissions
For
the evaluation of a
primary
that is a
name
denoting an object of an unconstrained numeric subtype, if the value
of the object is outside the base range of its type, the implementation
may either raise Constraint_Error or return the value of the object.
Examples
Examples of primaries:
4.0 -- real literal
Pi -- named number
(1 .. 10 => 0) -- array aggregate
Sum -- variable
Integer'Last -- attribute
Sine(X) -- function call
Color'(Blue) -- qualified expression
Real(M*N) -- conversion
(Line_Count + 10) -- parenthesized expression
Examples of expressions:
Volume -- primary
not Destroyed -- factor
2*Line_Count -- term
-4.0 -- simple expression
-4.0 + A -- simple expression
B**2 - 4.0*A*C -- simple expression
R*Sin(θ)*Cos(φ) -- simple expression
Password(1 .. 3) = "Bwv" -- relation
Count in Small_Int -- relation
Count not in Small_Int -- relation
Index = 0 or Item_Hit -- expression
(Cold and Sunny) or Warm -- expression (parentheses are required)
A**(B**C) -- expression (parentheses are required)
Ada 2005 and 2012 Editions sponsored in part by Ada-Europe