Next: , Previous: 4.3.3, Up: 4


4.4 Expressions

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.

Syntax

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)
Name Resolution Rules

8
A name used as a primary shall resolve to denote an object or a value.

Static Semantics

9
Each expression has a type; it specifies the computation or retrieval of a value of that type.

Dynamic Semantics

10
The value of a primary that is a name denoting an object is the value of the object.

Implementation Permissions

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.

Examples

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                    −− 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 or Item_Hit       −− expression
     (Cold and Sunny) or Warm    −− expression (parentheses are required)
     A**(B**C)                   −− expression (parentheses are required)