Ybadoo - Soluções em Software Livre
Tutoriais
Compiladores

(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, b, z : integer;
begin { sub2 }
...
end; { sub2 }

procedure sub3;
var a, x, w : integer;
begin { sub3 }
...
end; { sub3 }

begin { main }
...
end. { main }

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

  1. main chama sub1; sub1 chama sub2; sub2 chama sub3.
  2. main chama sub1; sub1 chama sub3.
  3. main chama sub2; sub2 chama sub3; sub3 chama sub1.
  4. main chama sub3; sub3 chama sub1.
  5. main chama sub1; sub1 chama sub3; sub3 chama sub2.
  6. main chama sub3; sub3 chama sub2; sub2 chama sub1.

 

a. main chama sub1; sub1 chama sub2; sub2 chama sub3.

a, x e w de sub3 e b e z de sub2 e y de sub1 (a de sub2 e a e z de sub1 e x, y e z de main estão ocultos)

b. main chama sub1; sub1 chama sub3.

a, x e w de sub3 e y e z de sub1 (a de sub1 e x, y e z de main estão ocultos)

c. main chama sub2; sub2 chama sub3; sub3 chama sub1.

a, y e z de sub1 e x e w de sub3 e b de sub2 (a de sub3 e a e z de sub2 e x, y e z de main estão ocultos)

d. main chama sub3; sub3 chama sub1.

a, y e z de sub1 e x e w de sub3 (a de sub3 e x, y e z de main estão ocultos)

e. main chama sub1; sub1 chama sub3; sub3 chama sub2.

a, b e z de sub2 e x e w de sub3 e y de sub1 (a de sub3 e a e z de sub1 e x, y e z de main estão ocultos)

f. main chama sub3; sub3 chama sub2; sub2 chama sub1.

a, y e z de sub1 e b de sub2 e x e w de sub3 (a e z de sub2 e a de sub3 e 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.