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

    --===========================================
    -- Attribute ::= Name
    --===========================================

    -- contain the kind of name returned by production Name.
    -- The valid value must be ATTRIBUTE.
    Returned_Name_Kind : Name_Kind;

begin
    -- Attribute

    Name (Current_Compilation_Unit => Current_Compilation_Unit,
          Program_Unit => Program_Unit,
          Halstead => Halstead,
          Loc => Loc,
          Mccabe => Mccabe,
          Out_Name_Kind => Returned_Name_Kind);

    -- Returned_Name_Kind must be ATTRIBUTE
    if Returned_Name_Kind /= Name_Kind'(Attribute) then
        raise Syntax_Error;
    end if;

end Attribute;