separate (Find_Unit.Build_Ada_Compilation_Unit)
procedure Block_Statement (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    =
    -- searching for an identifier. If we find an identifer, then  =
    -- we must be parsing a named block, otherwise it is just an   =
    -- unnamed block. We will invoke procedures to parse these     =
    -- two productions.                                            =
    -- Grammar :                                                   =
    --           <Block_Statement> =                               =
    --                <Named_Block> |                              =
    --                <Unnamed_Block>                              =
    --                                                             =
    -- written  by  GER  with  help  from  b2  and  JM             =
    -- May 1985  EVB Software Engineering Inc.                     =
    --==============================================================

    Peek_Token : Token_Package.Token;
    -- a future token in the input

begin
    -- Block_Statement

    -- Set the peek back to the beginnning

    Token_Package.Set_Peek_Back;

    -- Peek at the next token

    Peek_Next_Significant_Token (Significant_Token => Peek_Token);

    -- See if the token is an identifier.
    -- If the token is, then parsing a named block

    if Token_Package.Class_Of (Peek_Token) = Token_Package.Identifier then
        Named_Block (Current_Unit => Current_Unit);
    else
        -- parsing an unnamed block
        Unnamed_Block (Current_Unit => Current_Unit);
    end if;

end Block_Statement;