#### 8.5.4.4 Partition Declaration

In the declarative part, the user declares his partitions and can change their default behavior. `po_gnatdist` provides a predefined type Partition. The user can declare a list of partitions and can also initialize these partitions with an initial list of Ada units.

    DECLARATIVE_PART ::= {DECLARATIVE_ITEM}

    DECLARATIVE_ITEM ::=
       PARTITION_DECLARATION
     | REPRESENTATION_CLAUSE
     | SUBPROGRAM_DECLARATION
     | PRAGMA

    SUBPROGRAM_DECLARATION ::=
       MAIN_PROCEDURE_DECLARATION
     | PROCEDURE_DECLARATION
     | FUNCTION_DECLARATION

    PARTITION_DECLARATION ::=
       DEFINING_IDENTIFIER_LIST : Partition
          [:= ENUMERATION_OF_ADA_UNITS];

    DEFINING_IDENTIFIER_LIST ::=
       DEFINING_IDENTIFIER {, DEFINING_IDENTIFIER}

    STATEMENT ::=
       IDENTIFIER := ENUMERATION_OF_ADA_UNITS;

    SEQUENCE_OF_STATEMENTS ::=
       STATEMENT {STATEMENT}

Once declared, a partition is an empty list of Ada units. The operator ":=" adds the Ada units list on the right side to the current list of Ada units that are already mapped to the partition. This is a non-destructive operation. Whether a unit is a relevant Ada unit or not is checked later on by the back-end of `po_gnatdist`. These assignments can occur in the declarative part as well as in the body part.

    ENUMERATION_OF_ADA_UNITS ::= ({ADA_UNIT {, ADA_UNIT}});