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.