Considere o seguinte programa:
program main;
var a, b, c : integer;
procedure sub1;
var a, b, z : integer;
procedure sub2;
var a, y, z : integer;
begin { sub2 }
...
end; { sub2 }
begin { sub1 }
...
end; { sub1 }
procedure sub3;
var x, y, z : integer;
procedure sub4;
var x, b, c : integer;
begin { sub4 }
...
end; { sub4 }
begin { sub3 }
...
end; { sub3 }
begin { main }
...
end. { main }
Liste todas as variáveis, juntamente com as unidades de programa onde elas foram declaradas que são visíveis nos corpos de sub1
, sub2
, sub3
e sub4
, supondo que seja usado o escopo estático.
Dadas as seguintes sequências de chamada e supondo-se que seja usado o escopo dinâmico, quais variáveis são visíveis durante a execução da última função chamada?
Inclua, em cada variável visível, o nome da função em que ela foi definida.
main
chama sub2
; sub2
chama sub1
; sub1
chama sub3
.main
chama sub2
; sub2
chama sub1
; sub1
chama sub3
; sub3
chama sub4
.main
chama sub2
; sub2
chama sub3
; sub3
chama sub1
.main
chama sub3
; sub3
chama sub2
; sub2
chama sub4
.main
chama sub3
; sub3
chama sub2
; sub2
chama sub1
; sub1
chama sub4
.
Escopo estático:
a. main
a
, b
e c
de main
b. sub1
a
, b
e z
de sub1
e c
de main
(a
e b
de main
estão ocultos)
c. sub2
a
, y
e z
de sub2
e b
de sub1
e c
de main
(a
e z
de sub1
e a
e b
de main
estão ocultos)
d. sub3
x
, y
e z
de sub3
e a
, b
e c
de main
e. sub4
x
, b
e c
de sub4
e y
e z
de sub3
e a
de main
(x
de sub3
e b
e c
de main
estão ocultos)
Escopo dinâmico:
a. main
chama sub2
; sub2
chama sub1
; sub1
chama sub3
.
x
, y
e z
de sub3
e a
e b
de sub1
e c
de main
(z
de sub1
e a
, y
e z
de sub2
e a
e b
de main
estão ocultos)
b. main
chama sub2
; sub2
chama sub1
; sub1
chama sub3
; sub3
chama sub4
.
x
, b
e c
de sub4
e y
e z
de sub3
e a
de sub1
(x
de sub3
e b
e z
de sub1
e a
, y
e z
de sub2
e a
, b
e c
de main
estão ocultos)
c. main
chama sub2
; sub2
chama sub3
; sub3
chama sub1
.
a
, b
e z
de sub1
e x
e y
de sub3
e c
de main
(z
de sub3
e a
, y
e z
de sub2
e a
e b
de main
estão ocultos)
d. main
chama sub3
; sub3
chama sub2
; sub2
chama sub4
.
x
, b
e c
de sub4
e a
, y
e z
de sub2
(x
, y
e z
de sub3
e a
, b
e c
de main
estão ocultos)
e. main
chama sub3
; sub3
chama sub2
; sub2
chama sub1
; sub1
chama sub4
.
x
, b
e c
de sub4
e a
e z
de sub1
e y
de sub2
(b
de sub1
e a
e z
de sub2
e x
, y
e z
de sub3
e a
, b
e c
de main
estão ocultos)