| incomplete_type_declaration | private_type_declaration
full_type_declaration ::=
type
identifier [discriminant_part] is
type_definition;
enumeration_type_definition | integer_type_definition
| real_type_definition | array_type_definition
| record_type_definition | access_type_definition
| derived_type_definition
(WHITE, RED, YELLOW, GREEN, BLUE, BROWN, BLACK)
range
1 .. 72
array
(1 .. 10) of
INTEGER
type
COLOR is
(WHITE, RED, YELLOW, GREEN, BLUE, BROWN, BLACK);
type
COLUMN is
range
1 .. 72;
type
TABLE is
array
(1 .. 10) of INTEGER;
A :
array
(1 .. 10) of
BOOLEAN;
B : array
(1 .. 10) of
BOOLEAN;
A, B :
array
(1 .. 10) of
BOOLEAN;
subtype
identifier is
subtype_indication;
subtype_indication ::= type_mark [constraint]
type_mark ::= type_name | subtype_name
range_constraint | floating_point_constraint
| fixed_point_constraint | index_constraint
| discriminant_constraint
subtype
RAINBOW is
COLOR range
RED .. BLUE; -- see 3.3.1
subtype
RED_BLUE is
RAINBOW;
subtype
INT is
INTEGER;
subtype
SMALL_INT is
INTEGER range
-10 .. 10;
subtype
UP_TO_K is
COLUMN range
1 .. K; -- see 3.3.1
subtype
SQUARE is
MATRIX(1 .. 10, 1 .. 10); -- see 3.6
subtype
MALE is
PERSON(SEX => M); -- see 3.8
null
(for an access type), a string literal, an aggregate, or an attribute.