subprogram_specification is separate
;
| package body
package_simple_name is separate
;
| task body
task_simple_name is separate
;
subunit ::=
separate
(parent_unit_name) proper_body
with
TEXT_IO;
procedure
TOP is
is digits
10;
R, S : REAL := 1.0; package
FACILITY is
PI : constant
:= 3.14159_26536;
function
F(X : REAL) return
REAL;
procedure
G(Y, Z : REAL);
end
FACILITY; package body
FACILITY is
-- some local declarations followed by function
F(X : REAL) return
REAL is
begin
-- sequence of statements of F
...
end
F; procedure
G(Y, Z : REAL) is
-- local procedures using TEXT_IO
...
begin
-- sequence of statements of G
...
end
G;
end
FACILITY; procedure
TRANSFORM(U : in out
REAL) is
use
FACILITY;
begin
U := F(U);
...
end
TRANSFORM;
begin
-- TOP
TRANSFORM(R);
... FACILITY.G(R, S);
end
TOP;
type
REAL is digits
10;
R, S : REAL := 1.0; package
FACILITY is
PI : constant
:= 3.14159_26536;
function
F(X : REAL) return
REAL;
procedure
G(Y, Z : REAL);
end
FACILITY; package body
FACILITY is separate
; -- stub of FACILITY
procedure
TRANSFORM(U : in out REAL) is separate;
-- stub of TRANSFORM
begin
-- TOP
TRANSFORM(R);
...
FACILITY.G(R, S);
end
TOP; separate
(TOP)
procedure
TRANSFORM(U : in out
REAL) is
use
FACILITY;
begin
U := F(U);
...
end
TRANSFORM;
separate
(TOP)
package body
FACILITY is
-- some local declarations followed by
function
F(X : REAL) return
REAL is
begin
-- sequence of statements of F
...
end
F; procedure
G(Y, Z : REAL) is separate
; -- stub of G
end
FACILITY; with
TEXT_IO;
separate
(TOP.FACILITY) -- full name of FACILITY
procedure
G(Y, Z : REAL) is
-- local procedures using TEXT_IO
... begin
-- sequence of statements of G
...
end
G;