separate (Find_Unit.Build_Ada_Compilation_Unit)
procedure Package_Unit (Current_Unit : in out
                           Compilation_Unit.Ada_Compilation_Unit) is
    --==============================================================
    -- This procedure builds the next part of the grammar for an   =
    -- Ada compilation unit. Based on the next token, we will      =
    -- complete different productions. At present, we are parsing  =
    -- either a package specification, package body, or a generic  =
    -- package instantiation. This procedure just gets the keyword =
    -- 'package' and calls another subprogram Package_Unit_Tail to =
    -- finish parsing the grammar. If a syntax error is found, then=
    -- the exception Build_Syntax_Error will be raised.            =
    -- The grammar :                                               =
    --     <Package_Unit> =                                        =
    --         'PACKAGE' <Package_Unit_Tail>                       =
    --                                                             =
    -- written  by  GER  with  help  from  b2  and  JM             =
    -- May 1985  at EVB Software Engineering                       =
    --==============================================================

    Current_Token : Token_Package.Token;
    -- the current token read from the ada source code file

begin
    -- Package_Unit

    -- Get the next significant token to see if it is 'Package'

    Get_Next_Significant_Token (Significant_Token => Current_Token,
                                Current_Unit => Current_Unit);

    case Token_Package.Value_Of (Current_Token) is
        when Token_Package.Package_Token =>
            Compilation_Unit.Add_Token_To_Compilation_Unit
               (Token_To_Add => Current_Token, Unit_To_Add_To => Current_Unit);
            Package_Unit_Tail (Current_Unit => Current_Unit);
        when others =>

            -- Not a package, so raise syntax error

            raise Build_Syntax_Error;
    end case;

end Package_Unit;