1
An expression is a formula that defines the computation or retrieval of a value. In this International Standard, the term "expression" refers to a construct of the syntactic category expression or of any of the other five syntactic categories defined below.
2
expression::=
relation {and relation} | relation {and then relation}
| relation {or relation} | relation {or else relation}
| relation {xor relation}
3
relation::=
simple_expression [relational_operator simple_expression]
| simple_expression [not] in range
| simple_expression [not] in subtype_mark
4
simple_expression::= [unary_adding_operator] term {binary_adding_operator term}
5
term::= factor {multiplying_operator factor}
6
factor::= primary [** primary] | abs primary | not primary
7
primary::=
numeric_literal | null | string_literal | aggregate
| name | qualified_expression | allocator | (expression)
8
A name used as a primary shall resolve to denote an object or a value.
9
Each expression has a type; it specifies the computation or retrieval of a value of that type.
10
The value of a primary that is a name denoting an object is the value of the object.
11
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.
12
Examples of primaries:
13
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
14
Examples of expressions:
15/2
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([Unicode 952] )*Cos([Unicode 966] ) −− 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)