Sintaxis y semántica del lenguaje Práctica Nº 6 - UTN

Anuncio
Sintaxis y semántica del lenguaje
Práctica Nº 6
Esta práctica deberá resolverse en la semana del 15/05/13.
1) Describa detalladamente qué información se encuentra en un registro de
activación de una unidad Pascal.
2) Enumere características de un esquema de asignación de memoria
basado en pila y un esquema de asignación de memoria estático.
3) ¿Cuándo es necesario un esquema de asignación de memoria basado en
pila?
4) Una rutina es sensible a la historia si puede producir diferentes
resultados cuando se activa dos veces con los mismos valores como
parámetro y las mismas variables globales. Explique por qué un lenguaje
con asignación de memoria estático permite escribir rutinas sensibles a la
historia.
5) Explique por qué los enlaces estáticos y dinámicos en un bloque tienen el
mismo valor.
6) Dado el siguiente programa, describa en forma completa y detallada su
registro de activación.
Program Main;
var i,j:integer;
Procedure B;
var k:integer;
Procedure C;
var z:integer;
begin
z:=i*j;
i:= i + 4;
end;
begin
C;
k:= i + j;
writeln(k);
end;
i:=2;
j:=1;
B;
writeln(i,j);
end.
7) Hacer la ejecución de los siguientes programas usando las reglas de alcance
estático y dinámico. Muestre los estados de la pila y escriba los resultados del
programa. Nota: Para cualquiera de las corridas asuma que las variables se
inicializan en cero.
a)
Program Main;
var i,j:integer;
Procedure B;
begin
i:= i + 1; j:= j + 3; writeln(i,j);
end; {B}
Procedure A;
var i:integer;
begin
i:=5; B; i:= i + 3; writeln(i);
end; {A}
begin
i:= 2; j:= 15; A; writeln(i,j);
end; {Main}
b) Program Main;
var i,j:integer;
Procedure Tres;
begin
j:= j + 2;
end {Tres};
Procedure Uno;
Procedure Cuatro;
var i:integer;
begin
i:= 15; Tres; i:= i + j; writeln(i);
end;{Cuatro}
Procedure Dos;
var j:integer;
Procedure Tres;
begin
i:=i - 4;
end {Tres};
begin
j:=2; Tres; i:= j + 3; Cuatro; writeln(j);
end;{Dos};
begin
Dos; writeln(j);
end; {Uno}
begin
i:=20; j:=13; Uno; writeln(i,j);
end {Main};
c) Program A;
var i,j:integer;
Procedure B;
var j:integer;
Procedure D;
begin
j:=j+4;
end {D};
Procedure C;
var k,j:integer;
begin
j:=i+1; D; k:=i-1; writeln(i,j,k);
end {C};
begin
j:=0;
while i > 0 do
begin
C; i:= i - 1; j:= j + 2; B;
end;
end {B};
begin
readln(i); j:=15;
if i > 0 then B;
end {A};
d)
Program Main;
var i,j:integer;
v:array[1..4] of integer;
Procedure Dos;
begin
while j < 6 do
begin
v[i]:= v[i] + 3; j:= j + 1; Dos;
end;
end {Dos};
Procedure Uno;
var j:integer;
begin
i:= i + 1; j:=4;
if v[i] =10 then Dos
else v[i]:= v[i] + 7;
writeln(j);
end {Uno};
begin
for i:=1 to 4 do v[i]:= i + 8;
j:=3; i:=1; Uno; writeln(j);
for i:=1 to 4 do writeln(v[i]);
end. {Main}
Descargar