Professional Documents
Culture Documents
Repaso
Unidades de programa
Atributos:
Nombre
Declaracin/invocacin
Alcance
Dnde se conoce el identificador nombre Rutina
Ambiente de referencia de la Rutina: global, local, no local
Tipo
Dado por los parmetros y valor de retorno. Signatura
L-Valor:
Relacionado a dnde se almacena las sentencias en la memoria
R-Valor:
Relacionado al momento en que se hace la referencia a esa Rutina
Repaso
Procesador Abstracto - Memoria
Sentencias:
Set
Para asignar valores. Ej: set 10,D[20]; set 20, read; set
write,D[50]
Jump y jumpt
Bifurcacin incondicional y condicional. Ej: jump 47, jumpt
47,D[13]>D[8]
ip
C: Zona de cdigo
D: Zona de datos
Repaso
Esquemas de ejecucin - C1 y C2
Esquemas de ejecucin
Esttico, basado en pila y dinmico
Esttico:
C1:
Programa sencillo sin bloques internos, solo cdigo
programa principal
En zona de datos: SOLO datos locales
C2:
Programa con bloques internos SIN anidamientos
Compilacin junta y separada (C2)
En zona de datos: datos locales + pto. de retorno
4
C3
C2 + recursin y valor de
retorno
C3: Funcionamiento
El registro de activacin de cada unidad ser de tamao fijo
y conocido, pero no se sabr cuantas instancias de
cada unidad se necesitarn durante la ejecucin.
Igual que en C2 el compilador puede ligar cada variable
con su desplazamiento dentro del correspondiente
registro de activacin. El desplazamiento es esttico
La direccin donde se cargar el registro de activacin,
es dinmica, por lo tanto, la ligadura con la direcciones
absolutas en la zona de Datos de la memoria, solo puede
hacerse en ejecucin.
Cada nueva invocacin aloca un nuevo registro de
activacin y se establecen las nuevas ligaduras ente el
segmento de cdigo y el nuevo registro de activacin.
6
int fac()
{
int loc;
if (n>1) {
loc= n--;
return loc * fact();
}
else return 1;
}
main ()
{
get (n);
if (n>0) print (fact());
else print( input error);
}
Recursin
+
Valor de
retorno
C3: Funcionamiento
Una
int x invocacin
a P implica
Un molde del RA
de P para cada
activacin
En el caso C2:
D(P,0)
D(P,1)
0 Pto Retorno
1 x
?
pto de retorno
x
C3: Funcionamiento
Ahora hay que tener en cuenta que:
Cuando la instancia actual de la unidad termine de
ejecutarse, su registro de activacin no se necesitar
mas, por lo tanto se puede liberar el espacio ocupado
por su registro de activacin y dejar el espacio
disponible para nuevos registros de activacin y que..
Las unidades pueden devolver valores (funciones) y
esos valores NO deberan perderse cuando se
desactive la unidad. Entonces.
P
int x
P
0
1
P
2
3
Pto retorno
x
Valor Retorno
Link dinmico
Pto retorno
x
Valor Retorno
Link dinmico
10
C3: Moldes
D
0
punto retorno
link dinmico
current
free
valor de retorno
11
C3: Ejemplo
Supongamos la siguiente estructura de programa y
el siguiente esquema de llamado..
link dinmico
En la zona de Datos
current
free
current
free
current
free
B
B
Se llama a
C
C
pto de retorno
valor de retorno
A llama a
B
12
B llama a C
ip+4
call
free + 1
set 1,D[1]+1
set D[1],ip+4
set D[1]+1,D[0]
set 0,D[1]
set 1,D[1]+ size
jump comienzo
return
set 1,D[0]
set 0,D[D[0]+1]
jump D[D[1]]
Reestablece el free
Reestablece el current
Bifurca al punto de retorno
link
dinamico
13
int f1()
{
int a;
...
}
void main ()
{
int b;
...
f1();
..
}
14
int n;
int fact()
{
int loc;
if (n>1) {
loc = n--;
return loc*fact();
}
else
return 1;
}
reg act
global y
main
main()
{
get(n);
if (n>=0)
print(fact());
else
print(error entrada);
}
reg act fac
loc
15
fac
fac
int n;
int fact()
{
int loc;
if (n>1) {
else
loc = n--;
return loc*fact();
}
return 1;
loc
fac
fac = 1
fac
loc
print(error
main
fac = 2
}
main()
{
get(n);
if (n>=0)
print(fact());
else
entrada);
}
X2 1
imprime 2
16
C4
permite la definicin de una rutina
dentro de otras rutinas.
(anidamiento de rutinas)
C4: Anidamiento va
sentencias compuestas
Un bloque tiene forma de una sentencia
compuesta:
{<lista de declaraciones>;<lista de sentencias>}
Las variables tienen alcance local: son visibles
dentro de la sentencia compuesta, incluyendo
cualquier sentencia compuesta anidada en ella
Si en el anidamiento, hay una nueva declaracin
de un nombre, la declaracin interna enmascara
la externa del mismo nombre.
18
1
2
5
}
ALCANCE
int x,y,w:
while (..)
{
int x,z:
while (.)
{
int y;
3
}
if(..)
{
int x, w;
4
}
}
if ()
{
int a,b,c,d
}
x x y y
w w
a,b,c,d
19
alocacin: implementacin
2
3
5
4
int f();
dinmico
{ int x,y,w:
link dinmico
while (..)
{
int x,z:
incluir las
alocar el
x de 1
while (.)
necesidades espacio
y de 1
1
3
dentro del
dinmicamen
{ int y;
w de 1
registro de
te cuando se
2
}
x
de
2
a
de
5
activacin de ejecutan las
if(..)
la unidad a
sentencias
z de 2
b de 5
{int x, w;
4
la que
}
y de 3 x de 4 c de 5
pertenece
}
w de 4
d de 5
if ()
5 {int a,b,c,d
simple y eficiente
eficiente en
20
}
en tiempo
espacio
}
esttico
punto de retorno
//file
int x,y,z;
f1()
{
int t,u;
f2()
{
int x,w;
f3()
{
}
//end file
int y,w,t;
}
x = y + t + w + z;
x=y+t+w+z
local a f1
no local en f2 y f3
f1
local global local
global
21
main ();
{
current
int z,t;
}
//end file
Secuencia de
llamadas:
main f1 f2 f3 f2
global
x, y, z
main
z, t
f1
f2
f3
f2
t, u
x, w
cadena dinmica
x=y+t+w+z
f1
local global local
global
y, t, w
xw
punto retorno
link dinmico
link esttico
ip+45
call
free + 1
set 1,D[1]+1
set D[1],ip+45
set D[1]+1,D[0]
set 0,D[1]
set 1,D[1]+ size
jump comienzo
set 1,D[0]
set 0,D[D[0]+1]
jump D[D[1]]
reestablece el free
reestablece el current
bifurca al punto de retorno
return
link
dinamico
24
f2
x, y, z
z, t
t, u
x, w
x=y+t+w+z
f1
local global local
global
y, t, w
xw
C4
Pascal
C++
Modula
ADA
26
boolean b= true
B
print b
esttico
b es la de A
true
dinmico
b es la de C
false
C
boolean b= false
B
27
C5
Los datos pueden
alocarse durante la
ejecucin.
Datos
dinmicos
28
C5: Implementacin de
arreglos dinmicos
n1
n2
m1
m2
lugar donde se
almacenara A
tamao esttico
A: VECTOR (0..N);
B: VECTOR(1..M);
EJECUCION
punto retorno
link dinmico
A
li A
ls A
B
li B
ls B
COMPILACION
ACTIVACION DE LA
UNIDAD SE
EVALUAN LOS
LIMITES
link esttico
vbles locales
codigo generado
por el compilador
para implementar
este mecanismo
li A
ls A
li B
ls B
31
p pointer to integer
AB
new p
new p
B
el reg de Act de A no
esta en el tope
el reg de Act de B no permite
que luego se use en A
33
pila
p
la solucin es
alocarla en la
heap
heap
34
C6: LENGUAJES
dinmicos
Se trata de aquellos lenguajes que adoptan ms
reglas dinmicas que estticas.
APL, Snobol4 y algunas variantes de Lisp usan
tipado dinmico y reglas de alcance dinmicas.
Se podran tener reglas de tipado dinmicas y
de alcance esttico, pero en la practica las
propiedades dinmicas se adoptan juntas.
Una propiedad dinmica significa que las
ligaduras correspondientes se llevan a cabo en
ejecucin y no en compilacin.
35
esttico
Variables dinmicas C5
Tipos y alcance dinmico C6
heap
36
Ejecucin siguiendo
cadena esttica y dinmica
Pascal like
Diferentes resultados
por las diferentes
cadenas de ejecucin
37