Professional Documents
Culture Documents
Concepto de estabilidad
Entidad Variable
Atributos:
Nombre
Alcance
Esttico
Dinmico
Tipo
L-valor
Tiempo de vida
R-valor
Entidad Variable
Atributos:
Nombre
Alcance
Esttico
Dinmico
Tipo
L-valor
Tiempo de vida
R-valor
distintos nombres
1 entidad
int x = 0;
int *i = &x ;
int *j = &x ;
10
j
*i = 10;
Concepto de Sobrecarga
Sobrecarga
1 nombre
int i,j,k;
float a,b,c;
..
i=j+k;
a = b + c;
distintas entidades
1 entidad
No hay ambigedad
distintas entidades
Alias
distintos nombres
1 entidad
SEMANTICA OPERACIONAL
UNIDADES DE PROGRAMA
UNIDADES
Los lenguajes de programacin permiten que un programa este
compuesto por unidades.
UNIDAD
accin abstracta
FUNCIONES
un valor
declaracin
invocacin
En lenguaje C
El alcance de uno es de
dnde se declara al final
del archivo
La funcin E
dos
puede
INCORRECTO.
La
funcin
dos
NOespuede
alcance
de
dos
desde
CORRECTO.
invocar a la funcin uno porque esta en
Variable global
Ref. no local
Ref. local
Respecto al bloque
interno del main
int sum(int n)
{
int i, s;
s = 0;
for (i = 1; i <= n; ++i)
s+= i;
return s;
}
enteros
Invocacin funcin
Definicin vs Declaracin
Algunos lenguajes (C, C++, Ada, etc) hacen
distincin entre Definicin y Declaracin de las
rutinas
/* sum es una funcion que suma los n primeros naturales,
1 + 2 + + n; suponemos que el parametro n es positivo */
int sum(int n)
Encabezado
{
int i, s;
s = 0;
for (i = 1; i <= n; ++i)
s+= i;
return s;
}
Declaracin
Definicin
Cuerpo
Definicin vs Declaracin
Si el lenguaje distinguen entre la declaracin y la
definicin de una rutina permite manejar
esquemas de rutinas mutuamente recursivas.
int A(int x, int y);
float B(int z)
{
int w, u;
w = A(z, u);
};
int A(int x, int y)
{
float t;.....
t = B(x);.....
}
declaracin de A
defincin de B
es visible
defincin de A
Definicin vs Declaracin
Otro ejemplo: en Pascal uso de forward
REPRESENTACION EN
EJECUCION
La definicin de la rutina especifica un proceso
de computo.
Cuando se invoca una rutina se ejecuta una
instancia del proceso con los particulares
valores de los parmetros.
instancia de la unidad: es la representacin de
la rutina en ejecucin.
segmento de cdigo
instrucciones de la unidad
se almacena en la memoria
de instruccin C
contenido fijo
registro de activacin
datos locales de la unidad
se almacena en la memoria
de datos D
contenido cambiante
Memoria de Cdigo
Registro de
activacin
Memoria de Datos
Direcciones de C
Ejecucin:
incrementar ip
Procesador Abstracto
Instrucciones (Cont.)
JUMP: bifurcacin incondicional
jump 47
la prxima instruccin a ejecutarse ser la que este almacenada en
la direccin 47 de C
JUMPT: bifurcacin condicional, bifurca si la expresin se evala
como
verdadera
jumpt 47,D[13]>D[8]
bifurca si el valor almacenado en la celda 13 es mayor que el
almacenado en la celda 8
direccionamiento indirecto:
set D[10],D[20]
jump D[30]
Ip= 5 posicin 5 en C
10
30
20
30
ip
Elementos en ejecucin
Punto de retorno
Es una pieza cambiante de informacin que debe ser
salvada en el registro de activacin de la unidad
llamada.
Ambiente de referencia
Ambiente local: variables locales, ligadas a los
objetos almacenados en su registro de activacin
Ambiente no local: variables no locales, ligadas a
objetos almacenados en los registros de activacin
de otras unidades
Esttico
Basado en pila
Dinmico
BASADO EN PILA:
espacio predecible
El espacio se deduce del cdigo. Algol-60
Programas ms potentes cuyos requerimientos de
memoria no puede calcularse en traduccin.
La memoria a utilizarse es predecible y sigue una
disciplina last-in-first-out.
Las variables se alocan automticamente y se
desalocan cuando el alcance se termina
Se utiliza una estructura de pila para modelizarlo.
Una pila no es parte de la semntica del lenguaje, es
parte de nuestro modelo semntico.
C1: lenguaje
simple
Sentencias simples
Tipos simples
Sin funciones
Datos estticos de tamao fijo
un programa = una rutina main()
Declaraciones
Sentencias
E/S: get/print
enteros
reales
arreglos
estructuras
C1
main()
{
int i, j;
get(i, j);
while (i != j)
if (i > j)
i -= j;
else
j -= i;
print(i);
}
0
1
celda para i
celda para j
Zona DATOS
Registro de
activacin
C1
Cmo sera el CDIGO?
main()
{
Zona CDIGO
int i, j;
get(i, j);
while (i != j)
if (i > j)
i -= j;
else
j -= i;
print(i);
}
0 set 0,read
1 set 1,read
2 jumpt 8 , D[0] = D[1]
3
4
5
6
7
C1
C
0
0 set 0,read
1 net 1,read
2 jumpt 8, D[0] = D[1]
3
4
5
6
7
8
D
0
1
celda para i
celda para j
Registro de
activacin
C2
Rutinas internas
disjuntas: no pueden estar anidadas
no son recursivas
rutinas
main
C2
int i = 1, j = 2, k = 3;
alpha()
1
{
2
int i = 4, j= 5; global
3
i+=k+j;
};
beta()
4
{
alpha
5
int k = 6;
i=j+k;
alpha();
beta
6
};
main()
{
Qu RA
beta();
}
Datos?
Todo esttico
i
j
3
i
j
6
7
se alocan en la zona de
int i = 1, j = 2, k = 3;
C2: call-return
Cmo cambia la informacin en la zona
de Datos?
alpha()
{int i = 4, l = 5;
i+=k+l; };
beta()
{int k = 6;
i=j+k;alpha(); };
main()
14
15
set 6,16
jump 100
18
125
4
12
49
50
58
set 4, D[4]+D[2]+D[5]
99
100
jumpt D[3]
122
123
124
seg.c
main 0
seg.c
alpha
seg.c
beta
4
5
16
beta();
}
r.act.
global
retorno
i
l
retorno
r.act.
alpha
r.act.
beta
alpha();...
0
.
.
40
0
1
0
.
.
49
0
1
0
.
.
49
0
1
relativas
C2
El compilador no puede ligar variables
locales a direcciones absolutas
Tampoco variables globales
Linkeditor:
encargado de combinar los mdulos
ligar la informacin faltante
C2 y C2 no difieren semnticamente