Ybadoo - Soluções em Software Livre
Tutoriais
Compiladores

Slides

(Sebesta, 2000) Considere o seguinte programa Pascal esquemático:

program main;
var x : integer;

procedure sub1;
var x : integer;

procedure sub2;
begin { sub2 }
...
end; { sub2 }

begin { sub1 }
...
end; { sub1 }

procedure sub3;
begin { sub3 }
...
end; { sub3 }

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

Suponhamos que a execução desse programa seja na seguinte ordem unitária:

main chama sub1

sub1 chama sub2

sub2 chama sub3

  1. Supondo que esteja presente o escopo estático, qual declaração de x é a correta para a referência a x em:
    1. sub1
    2. sub2
    3. sub3
  2. Supondo que esteja presente o escopo dinâmico, qual declaração de x é a correta para a referência a x em:
    1. sub1
    2. sub2
    3. sub3

(Sebesta, 2000) Suponha que o seguinte programa tenha compilado e executado usando regras de escopo estático. Qual valor de x é impresso no procedimento sub1? De acordo com as regras de escopo dinâmico, qual valor de x é impresso no procedimento sub1?

program main;
var x : integer;

procedure sub1;
begin { sub1 }
writeln('x = ', x);
end; { sub1 }

procedure sub2;
var x : integer;
begin { sub2 }
x := 10;
sub1;
end; { sub2 }

begin { main }
x := 5;
sub2;
end. { main }

(Sebesta, 2000) Considere o seguinte programa:

program main;
var x, y, z : integer;

procedure sub1;
var a, y, z : integer;

procedure sub2;
var a, b, z : integer;
begin { sub2 }
...
end; { sub2 }

begin { sub1 }
...
end; { sub1 }

procedure sub3;
var a, x, w : integer;
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 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.

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

(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.

  1. main chama sub2; sub2 chama sub1; sub1 chama sub3.
  2. main chama sub1; sub1 chama sub2; sub2 chama sub3.
  3. main chama sub3; sub3 chama sub2; sub2 chama sub1.

(Sebesta, 2000) Considere o seguinte programa em C:

void fun(void)
{
int a, b, c; /* definição 1 */
...
while(...)
{
int b, c, d; /* definição 2 */

... (1)
while(...)
{
int c, d, e; /* definição 3 */

... (2)
}
... (3)
}
... (4)
}

Para cada um dos quatro pontos marcados nessa função, liste cada variável visível, juntamente com o número da instrução de definição que a define.

(Sebesta, 2000) Considere o seguinte programa C esquemático:

void main()
{
int a, b, c;
...
}

void fun1(void)
{
int b, c, d;
...
}

void fun2(void)
{
int c, d, e;
...
}

void fun3(void)
{
int d, e, f;
...
}

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 fun1; fun1 chama fun2; fun2 chama fun3.
  2. main chama fun1; fun1 chama fun3.
  3. main chama fun2; fun2 chama fun3; fun3 chama fun1.
  4. main chama fun3; fun3 chama fun1.
  5. main chama fun1; fun1 chama fun3; fun3 chama fun2.
  6. main chama fun3; fun3 chama fun2; fun2 chama fun1.

(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.

(Sebesta, 2000) Considere o seguinte programa C esquemático:

void main()
{
int a, b, c;
...
}

void fun1(void)
{
int b, c, d;
...
}

void fun2(void)
{
int c, d, e;
...
}

void fun3(void)
{
int d, e, f;
...
}

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 fun2; fun2 chama fun1; fun1 chama fun3.
  2. main chama fun3; fun3 chama fun1; fun1 chama fun2.

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.

(Sebesta, 2000) Considere o seguinte programa:

public class Test {
private int x, y, z, w;
public void sub1() { int a, y, z, w; }
public void sub2() { int a, b, z, w; }
public void sub3() { int a, b, c, w; }
public void sub4() { int a, b, c, d; }
public static void main(String[] args) { }
}

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 sub2; sub2 chama sub3; sub3 chama sub4.
  3. main chama sub2; sub2 chama sub3; sub3 chama sub1.
  4. main chama sub4; sub4 chama sub3; sub3 chama sub1.
  5. main chama sub3; sub3 chama sub2; sub2 chama sub1.

Considere o seguinte programa C esquemático:

void main()
{
int a, b, c;
...
}

void fun1()
{
int b, c, z;
...
}

void fun2()
{
int c, y, z;
...
}

void fun3()
{
int x, y, z;
...
}

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 fun1; fun1 chama fun2; fun2 chama fun3.
  2. main chama fun1; fun1 chama fun3.
  3. main chama fun2; fun2 chama fun3; fun3 chama fun1.
  4. main chama fun3; fun3 chama fun1.
  5. main chama fun1; fun1 chama fun3; fun3 chama fun2.
  6. main chama fun3; fun3 chama fun2; fun2 chama fun1.

Considere o seguinte programa esquemático, escrito na linguagem Java:

public class Test {
private int x, y, z;
public void sub1() { int x, y, c; }
public void sub2() { int x, b, c; }
public void sub3() { int a, b, z; }
public void sub4() { int a, y, z; }
public static void main(String[] args) { int a, b, c; }
}

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 sub4; sub4 chama sub1.
  4. main chama sub3; sub3 chama sub4.
  5. main chama sub1; sub1 chama sub3; sub3 chama sub2.
  6. main chama sub3; sub3 chama sub2; sub2 chama sub4.

Sebesta, Robert W. (2000). Conceitos de Linguagens de Programação. 4ª edição. Porto Alegre: Bookman. 624 páginas.