(Sebesta, 2000) Considere o seguinte programa:
program main;
var x, y, z : integer;
procedure sub1;
var a, y, z : integer;
begin { sub1 }
...
end; { sub1 }
procedure sub2;
var a, x, w : integer;
procedure sub3;
var a, b, z : integer;
begin { sub3 }
...
end; { sub3 }
begin { sub2 }
...
end; { sub2 }
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 e sub3, 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 sub1; sub1 chama sub2; sub2 chama sub3.main chama sub3; sub3 chama sub2; sub2 chama sub1.Escopo estático:
a. main
x, y e z de main
b. sub1
a, y e z de sub1; x de main (y e z de main estão ocultos)
c. sub2
a, x e w de sub2; y e z de sub1 (a de sub1; x, y e z de main estão ocultos)
d. sub3
a, b e z de sub3; x e w de sub2; y de sub1 (a de sub2; a e z de sub1; x, y e z de main estão ocultos)
Escopo dinâmico:
a. main chama sub2; sub2 chama sub1; sub1 chama sub3.
a, b e z de sub3; y de sub1; x e w de sub2 (a e z de sub1; a de sub2; x, y e z de main estão ocultos)
b. main chama sub1; sub1 chama sub2; sub2 chama sub3.
a, b e z de sub3; x e w de sub2; y de sub1 (a de sub2; a e z de sub1; x, y e z de main estão ocultos)
c. main chama sub3; sub3 chama sub2; sub2 chama sub1.
a, y e z de sub1; x e w de sub2; b de sub3 (a de sub2; a e z de sub3; x, y e z de main estão ocultos)
Sebesta, Robert W. (2000). Conceitos de Linguagens de Programação. 4ª edição. Porto Alegre: Bookman. 624 páginas.