Ybadoo - Soluções em Software Livre
Tutoriais
Compiladores

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.

  1. main chama sub2; sub2 chama sub1; sub1 chama sub3.
  2. main chama sub2; sub2 chama sub1; sub1 chama sub3; sub3 chama sub4.
  3. main chama sub2; sub2 chama sub3; sub3 chama sub1.
  4. main chama sub3; sub3 chama sub2; sub2 chama sub4.
  5. 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 mainestã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 mainestã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 mainestã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 mainestã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 mainestão ocultos)