separate (Find_Unit.Build_Ada_Compilation_Unit)
procedure Inside_Left_Right_Paren (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  =
    -- a left parenthesis and looking for a right parenthesis. If  =
    -- a left parenthesis is found before the corresponding right  =
    -- parenthesis, then we will recurse on this procedure. If we  =
    -- don't find a parenthesis, then we will just keep getting    =
    -- significant tokens until we find a right parenthesis.       =
    -- If we find a syntax error, then we will raise the exception =
    -- Build_Syntax_Error.                                         =
    -- The grammar :                                               =
    --      <Inside_Left_Right_Paren> =                            =
    --         '(' <Inside_Left_Right_Paren> ')' |                 =
    --          *                                                  =
    --                                                             =
    -- written  by  GER  with  help  from  b2  and  JM             =
    -- May 1985  at EVB Software Engineering                       =
    --==============================================================

    Current_Token : Token_Package.Token;
    -- Holds the current token
    Peek_Token : Token_Package.Token;
    -- This will token will be looked later

begin
    -- Inside_Left_Right_Paren

    -- Parse a right parenthesis

    Get_Next_Significant_Token (Significant_Token => Current_Token,
                                Current_Unit => Current_Unit);
    Compilation_Unit.Add_Token_To_Compilation_Unit
       (Token_To_Add => Current_Token, Unit_To_Add_To => Current_Unit);

    if Token_Package.Value_Of (Current_Token) =
       Token_Package.Left_Parenthesis_Token then

        -- Repeatly parse tokens until the right paren is found

        Find_Right_Paren:
            loop
                Peek_Next_Significant_Token (Significant_Token => Peek_Token);

                exit Find_Right_Paren when
                   Token_Package.Value_Of (Peek_Token) =
                      Token_Package.Right_Parenthesis_Token;

                Inside_Left_Right_Paren (Current_Unit => Current_Unit);

            end loop Find_Right_Paren;

        -- Parse a right parenthesis

        Get_Next_Significant_Token (Significant_Token => Current_Token,
                                    Current_Unit => Current_Unit);
        Compilation_Unit.Add_Token_To_Compilation_Unit
           (Token_To_Add => Current_Token, Unit_To_Add_To => Current_Unit);

    elsif Token_Package.Class_Of (Current_Token) =
          Token_Package.End_Of_File then
        raise Build_Syntax_Error;
    else
        -- Not a right parenthesis
        null;
    end if;

end Inside_Left_Right_Paren;