##### 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}});