separate (Compilation_Unit.Produce_Metrics)
procedure Name_Suffix (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

    --====================================================
    -- Name_Suffix ::=
    --     Aggregate
    --   | "." Selector
    --   | "'" <IDENTIFIER>
    --====================================================

    Current_Token : Token_Package.Token;
    Dummy_Count : Positive;

begin
    -- Name_Suffix

    case Token_Package.Value_Of (Peek (From => Current_Compilation_Unit)) is

        when Token_Package.Left_Parenthesis_Token =>
            Aggregate (Current_Compilation_Unit => Current_Compilation_Unit,
                       Program_Unit => Program_Unit,
                       Halstead => Halstead,
                       Loc => Loc,
                       Mccabe => Mccabe,
                       Number_Of_Components => Dummy_Count);

        when Token_Package.Dot_Token =>

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

            -- increment Halstead DOT operator count
            Halstead.Store_Operator ((Kind => Halstead_Operator.Dot_Halstead));

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

        when Token_Package.Apostrophe_Token =>

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

            -- increment Halstead TICK operator count
            Halstead.Store_Operator ((Kind => Halstead_Operator.Tick_Halstead));

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

            --**
            case Token_Package.Class_Of (Current_Token) is
                when Token_Package.Identifier | Token_Package.Keyword =>
                    null;
                when others =>
                    raise Syntax_Error;
            end case;

            -- increment Halstead operand count
            Halstead.Store_Operand (Halstead_Operand.Definition
                                       (Token_Package.Value_Of
                                           (This_Token => Current_Token)));

        when others =>
            raise Syntax_Error;

    end case;

end Name_Suffix;