Guía de ejercicios de Simplesem

Anuncio
Guía de ejercicios de Simplesem
Antes de que la empiecen a ver les aclaro que cada ejercicio de esta guía corresponde a
los ejercicios resueltos del archivo guía_resuelta.pdf.
Además quiero aclarar algunas cosas del archivo guía_resuelta.pdf:
- El seguimiento de memoria lo hice de la siguiente manera:
0
0
1
2
3
4
5
6
7
n
Prmain
Ldmain
1
3
2
3
3
4
c
f
Prfact
Ldfact
loc
8 c
1
f
El movimiento de memoria lo hice de dos columnas en dos y marque los
cambios con color, es decir en este caso en la columna 1 se guardan los valores y
en la 2 solamente se mueven el current y el free.
En la 3 y la 4 se movieron el current y el free (marcado con color) y se asignaron
valores a PR fact y LD fact.
-
Cualquier cosa me dejan un comentario
Y otra aclaración que quiero hacer es que puede haber errores.
3) Dado el siguiente segmento de código, realizar traducción y enlazado.
int n;
int fact()
{
int loc;
if (n > 1) {
loc = n--;
return loc * fact();
}
else
return 1;
}
main ()
{
getint(n);
if (n >= 0)
printf (fact());
else
printf(“número negativo!!”);
}
4) Dado el siguiente programa codificado en un LP genérico:
int a=15;
main()
{
f(a);
}
void f(int j)
{ int x;
while (j>0)
{ read (x);
j:=j-x;
}
}
Indique traducción y enlazado en SIMPLESEM (suponga un LP basado en Pila).
5) Suponga un lenguaje basado en pila. Realizar las etapas de traducción y enlazado de
SIMPLESEM del siguiente programa y mostrar como evoluciona el estado de la
memoria durante la ejecución del programa. Se podría hacer con un lenguaje
estático?
Program mipro;
var X, Y: integer
procedure factorial (n: integer; var f: integer):
var i: integer;
begin
f:=1;
for i:=2 to n do
f:=f*i;
end;
begin
Y:=0;
X:=4;
factorial(X,Y);
write(Y)
end.
6) Para el siguiente programa, suponiendo un LP con un esquema de memoria basado
en pila, realice:
a) Traducción de los elementos más importantes.
b) Enlazado con la generación del código simplesem.
Program Uno;
Var x:Integer;
Function XXYZ:integer;
Var w:integer;
Begin
w:=x;
while w>x do
w:=w-1;
XXYZ:=w
End;
Procedure XXY;
Var z,y,i:integer;
Begin
y:=x;
for i:=1 to 5 do
Begin
z:=XXYZ;
Writeln(z);
y:=y-1
End;
writeln(y)
End
Begin
Read(x);
XXY;
End.
7) Considere el siguiente programa tipo Algol:
Program A;
Procedure B;
Procedure C;
....
Call B;
.....
End C;
.......
Call C;
.......
End B;
Procedure D;
..........
Call B;
......
End D;
.
......
Call D;
.....
End A;
Describa cada etapa en la vida de la pila hasta que B es invocada dentro del
procedimiento C. En particular muestre los links dinámicos y estáticos y los punteros
Current y Free.
8) El siguiente seudocódigo contiene procedimientos anidados con variables no
locales. Para cada asignación en el seudocódigo describa lo que ocurre cada vez que
se ejecutan las asignaciones. Describa explícitamente las secuencias de invocación y
retorno, así como el uso y mantenimiento de los links dinámicos y estáticos.
module M;
procedure P();
procedure Q();
procedure R();
begin (*R*)
.....P();.....
end R;
begin (*Q*)
.....R();.........
End Q;
begin (*P*)
......Q();......
end P;
begin (*M*)
P();....
end M;
15) Para el siguiente programa, suponiendo un LP con un esquema de memoria basado
en pila con reglas de ámbito estáticas, realice:
a) Traducción de los elementos más importantes.
b) Enlazado con la generación del código simplesem.
Program Uno;
Var x:Integer;
Procedure Dos;
Var z,y:integer;
Function Tres:integer;
Var w:integer;
Begin
w:=y;
if w >= 0 then
w:=w*y;
else
w:=w*x;
Tres:=w
End;
Begin
y:=x;
while y>0 do
Begin
z:=tres;
Writeln(z);
y:=y-1
End
End
Begin
Read(x);
Dos
End.
Descargar