separate (Compilation_Unit.Produce_Metrics)
procedure Selector (Current_Compilation_Unit : in out Ada_Compilation_Unit;
                    Program_Unit : in Program_Unit_State_Machine;
                    Halstead : in Halstead_State_Machine;
                    Loc : in Loc_State_Machine;
                    Mccabe : in Mccabe_State_Machine) is

    --=========================================
    -- Selector #::= "ALL" | Name_Prefix
    --=========================================

    Current_Token : Token_Package.Token;

begin
    -- Selector

    if Token_Package.Value_Of (Peek (From => Current_Compilation_Unit)) =
       Token_Package.All_Token then

        Get_Next_Token (Out_Token => Current_Token,
                        From => Current_Compilation_Unit,
                        Current_Loc => Loc);

        -- increment Halstead ALL operator count
        Halstead.Store_Operator ((Kind => Halstead_Operator.All_Halstead));

    else

        Name_Prefix (Current_Compilation_Unit => Current_Compilation_Unit,
                     Program_Unit => Program_Unit,
                     Halstead => Halstead,
                     Loc => Loc,
                     Mccabe => Mccabe);

    end if;

end Selector;