_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________
Diapositiva2
Arquitecturasdetraduccin
Cdigo
fuente
Cdigo
binario
Cdigointermedio
(ensamblador,pcode,bytecode,etc.)
Backend:dellenguaje
intermedio alcdigo binario
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________
Diapositiva3
Compilador
G3.AEF.
G2.AP.
Tokenizacin
rboles
Cdigofuente
Anlisislexicogrfico
Cdigotokenizado
Anlisissintctico
rbolessintcticos
Anlisissemntico
rbolesdecorados
Optimizacin
Cdigointermedio
Enlace
(generadordecdigo)
z:=(2*a*y+b)*(2*a*y+c)
t:=2*a*y;
Formaleseinformales.
z:=(t+b)*(t+c);
Comportamientos.
Estticasydinmicas.
for(k=1;k <a+b;k++)
x=k*b
t=a+b;
for(k=1;k<t; k++)
Cdigodemquina
UTN - FRM - SSL: Proceso de traduccin
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________
Diapositiva4
Traductores
Intrpreteensoftware: porejemploJVM
Emuladordehardware: similaralanterior,peroimplementadoen
hardware
Traductorbinario: instruccionesdelanuevaarquitecturaque
reproducenelcomportamientodelavieja
Compiladornativo: compiladorescruzadosparaayudaracrearlos
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________
Diapositiva5
Compiladornativo
programa
Anlisislexicogrfico
tokens
Tabladesmbolos
Nombre
Token asociado
Informacindetipo
Alcance
Direccin
Inicializacin
Anlisissintctico
rboles
Anlisissemntico
intermedio
Optimizacin
objeto
Generacin de
cdigo mquina
Cdigoobjeto
(bibliotecas
estticas)
Cdigoobjeto
(bibliotecas
dinmicas)
Enlace(linker)
ejecutable
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________
Diapositiva6
Traductordeunpaso
U1
Facilidad de uso
Anlisislexicogrfico
caracteres
Aplicaciones sencillas
Poca optimizacin
Tablade
smbolos
Traduccin rpida
Etapas de anlisis y
generacin unificadas
Anlisissintctico
Anlisissemntico
Cdigo objeto
ineficiente
Generador
Gestinde
errores
cdigo objeto
ejecutable
errores
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________
Diapositiva7
Intrprete puro
Traductor a
representacin
interna
instruccin
Facilidad de uso
Permiten interactuar
con el estado del
programa
Nmerode
instruccin
caracteres
Tablade
smbolos
Sin optimizacin
etiqueta
Analizan y ejecutan
un enunciado por vez
Las instrucciones se
Numeran o etiquetan
nmero
Evaluador
instrucciones
siguiente
instruccin
Requieren de un
entorno para ejecutar
Gestinde
errores
errores
datos
resultado de la
ejecucin
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________
Diapositiva8
Traductor
caracteres
Cdigo
intermedio
Multiplataforma
Intrprete por software
o hardware
Justintime
compiler
Requieren intrprete
para la ejecucin (VM),
pero es muy pequeo
Cdigodemquina
datos
Intrprete
errores
resultado de la ejecucin
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________
Diapositiva9
CompiladoreseIntrpretes
Analizador
(lxicoysintctico)
Preprocesador
Programa
fuente
rbolde
anlisis
Traductor
Intrprete
Entornode
ejecucin
Programa
Compilador
Cdigo
ensamblador
Intrpreteparcial
Enlazador
Bytecode
Cdigode
mquina
Compiladores e intrpretes
tienen similares front-ends pero diferentes back-ends
UTN - FRM - SSL: Proceso de traduccin
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________
Diapositiva10
Implementacinsemntica:asignacin
Asignacin
Cambiodeestado
Modos
Mltiple
Entrada(input)
Inicializacinvs.Asignacin
A=C+1
Conceptos
Lvalue vs.Rvalue
R-value
Expresin
Constante
Variable
L-value
Referencia a memoria
Nunca una expresin o constante
Enunciadovs.Operador
10
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________
Diapositiva11
Implementacinsemntica:bifurcacin
Semntica
Expresin decontrol
Formas
Simple
Doble
Mltiple
Selectordecasos
Opcindedescarte
Bloque deenunciados
Esquemasdeanidamiento
Transferenciaincondicional
Rtulos
UTN - FRM - SSL: Proceso de traduccin
11
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________
Diapositiva12
Implementacinsemntica:iteracin
Semntica
Expresin decontrol
Bloque deenunciados
Esquemasdeanidamiento
Ciclos
Modificacininternadeparmetros
Cantidadindeterminada
top [evalua expresin y deja
Evaluacininicialyfinal
resultado en registro]
JZR exit
Cantidaddeterminada
[bloque]
Valorinicialyfinal
JZR top
exit:
[resto del programa]
12
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________
Diapositiva13
Semnticadedatos
Implementacin
Direccionesde
memoria
Descriptores
(conjuntodeatributos)
Abstraccinmediante
variables
Estticos
nombre
tipo
tipo
Dinmicos
direccin
valor
tiempodevida
alcance
direccin
valor
tiempodevida
alcance
Almacenamiento
binario
Formatos
Dato
DescriptoryDato
Descriptor
Dato
13
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________
Diapositiva14
Declaracindevariables
Sea
Vinculadosmediante
laasignacin
intA;
A=21;
Vinculadosalingresaral
mbitodeexistencia
Modeloimperativo:generatresobjetos
nombre
A
ubicacin
valor
FFA0 9B76
21
Vinculadosenelmomentode
lainvocacin
Modelodeclarativo:generadosobjetos
nombre
valor
21
14
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________
Diapositiva15
Implementacindedatos
Losobjetos dedatos siempre son dealgn tipo, loque implica que tienen asociados
Valores
Operaciones (f:tipo xtipo tipo)
Representacin desu almacenamiento
Equivalencia detipo
Estructural
Por nombre (alias)
Verificacin
Calcularoinferirtiposyvalidarexpresiones
Estticaodinmica
Variablesvs.Constantes
Segmentodedatosvs.segmentodecdigo
Primitivos
Atmicossinestructurainternacompleja
Operacionesimplementadasporhardware
UTN - FRM - SSL: Proceso de traduccin
15
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________
Diapositiva16
Sistemageneraldetipos
16
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________
Diapositiva17
Implementacindeltipoentero
Formatoderepresentacin
Tipoentero(mximo2n1 1ymnimo2n1 )
Negativosporcomplemento2
Tamaoshabitualescon/sinsigno1,2,4,8bytes
Operacionesmsrpidas
Alineacin(bytemssignificativo)
S
Dato
(0 +, 1 -)
Entero en binario
descriptor
Direccin
descriptor
Dato
signo
Dato
signo
17
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________
Diapositiva18
Implementacindeltipoentero
Ejemplos
Seaxenterode32bits(2147483648 a+2147483647)
x=2147483648; 10000000000000000000000000000000
x=2147483648; 10000000000000000000000000000000
Seaxenterode32bitssinsigno(0a4294967296)
x=2147483648; 10000000000000000000000000000000
x=1;
11111111111111111111111111111111
x=4294967296; 00000000000000000000000000000000
x=4294967295; 11111111111111111111111111111111
18
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________
Diapositiva19
Implementacindeltiporeal
Caractersticas
Puntoflotante(IEEE754)
Noexactos(simpleydobleprecisin)
Tamaoshabituales4,8bytes
Operacionesmslentasquelosenteros
Formatoderepresentacin
(1)S *2(E B)*(1+(M/2N))donde 0<=M<1
Ncantidad debitspara M(23or52)
Bes 127(32bits)o1023(64bits)
19
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________
Diapositiva20
Implementacindeltiporeal
DadosEyM:
E=255,M<>0 invlido
E=255,M=0 infinito
0<E<255 2{E127}*(1+(M/223))
E=0,M<>0 2126*(M/223)
E=0,M=0 0
Seaxflotantede32bits x=0.3333333333333333;
0 01111101 01010101010101010101011
x=0.3;
0 01111101 00110011001100110011010
Reconstruido:0.3000000119209289600
x=1.0
0 01111111 00000000000000000000000
Comparaciones errneas:==o!=
Solucin:establecer une=0.001
(x 3.0)<e||(3.0 x)<e
20
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________
Diapositiva21
Implementacindeotrostipos
Enterossinsigno
Decimalopuntofijo
Slopositivos
Precisinexacta
Almacenamientopocoeficiente
Ej.1234.567=>1234567conS=3
Cantidaddedecimalesfija
EnC/C++losoperadores&&,
||,!estnasociadosalos
tiposnumricos
Lgico
1bito1byte
EnC/C++setratacomoun
tiponumrico
Carcter
ASCII(1byte)
UNICODE(2bytes)
21
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________
Diapositiva22
Conceptossobretiposdedatos o1
Sistemadetipos
Mecanismoparadefinirtipos
Conjuntodereglasparadeterminar
Equivalencia
Compatibilidad
Inferencia
Ada
Java / C#
Fortran
Verificacindetipos(type checking)
Violacindelareglas(type clash)
Lenguajesfuertemente tipeados
C/C++
JS
Tiposestticos
Lenguajesdbilmentetipeados
ASM
Tiposdinmicos
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________
Diapositiva23
Conceptossobretiposdedatos
Conversin detipos
Implcita =Coercin
Explcita =cast (molde)
Prdida dedatos (desbordamiento delamscara debits)
Prdida deprecisin (truncamiento yredondeo)
Polimorfismo
Unmismo operador aplicado adiferentes tipos
Subtipos
23
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________
Diapositiva24
Punteros
Formato
Noes unentero
Tamao
Puntero vs.objeto apuntado
direccinde
memoria
Asignacin devalores
Inicial
Final(garbage)
Objetode
dato
valor
Puntero
Consideracionesdediseo
24
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________
Diapositiva25
Punteros
Asignacin
Sean A y B variables reales: A B
0.4
A: 7.2
A:
0.4
0.4
B:
B:
Sean A y B variables puntero : A B
7.2
A:
A:
0.4
B:
B:
0.4
25
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________
Diapositiva26
Punteros
Operaciones
Asignarunadireccindememoria
Obtenerunadireccindememoria
Referenciarunadireccindememoria
Comparardireccionesdememoria
Aritmticadepunteros
Usodecast
Ejemplo
long x, *y, z;
x = 12;
y = &x;
*y
(250)
(254)
(258)
12
30
250
17
z = *y + 5;
*y = 30;
UTN - FRM - SSL: Proceso de traduccin
26
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________
Diapositiva27
Expresiones
Operadores
Precedencia
Asociatividad
Sobrecarga
Caracter
tratamiento como enteros
Cadena
tipo predefinido
arreglos
Relacionales ylgicas
evaluacin xcortocicuito
Aritmticas
Tabla de jerarqua/asociatividad en C
I-D () [] -> .
D-I ++ -- + - ! ~ (tipo) * & sizeof
I-D * / %
I-D + Sean
I-D << >>
int a,*b,Z=1,X=4,Y=2;
I-D < <= > >= a=4;
I-D == !=
b=&a;
I-D &
rbol deexpresin
I-D ^
++*bvs.*++b
I-D |
++Z*Z++
I-D &&
Z+(Y==0?X:X/Y)
I-D ||
D-I ?:
D-I = += -= *= /= %= &= ^= |= <<= >>=
I-D ,
27
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________
Diapositiva28
Tiposestructurados
Grupodedatosdelmismoodiferentes tipos
Grafos
rboles
Lineales
Anillos
Listas
Archivos
Registros
Uniones
Multidimensionales
Unidimensionales
Arreglos
Heterogneos
Camposdebits
Enumerados
Homogneos
28
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________
Diapositiva29
Implementacindeltipocadena
Esttico
Longitud fija
29
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________
Diapositiva30
Arreglosunidimensionales
Conjunto homogneo de datos gestionado como un bloque
Caractersticas
Dimensin:Entero>0
Sub=>L1 Sub<L1+Dim
Clculodedirecciones
int x[8];
Lvalue:x[5]=15;
Lvalue yRvalue:x[2]=x[5];
Lvalue(x[k])=>DB+k*tTipo
Subndicesconrango
Seax[L1..U1]:TIPO
dondeL1=2yU1=9
Espacio=(U1 L1+1)*tTipo
Lvalue(x[k])=>DB+(k L1)*tTipo = (DB L1*tTipo) +(k L1)*tTipo
Lvalue(x[k])=>OV +(k L1)*tTipo
UTN - FRM - SSL: Proceso de traduccin
30
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________
Diapositiva31
Arreglosbidimensionales
Caractersticas
Dimensiones:Entero>0
Subndices=>L1 Sub1<L1+Dim1,L2 Sub2<L2+Dim2
Clculo de direcciones
int x[4][3];
x[2][1] = 434;
L-value(x[i][j]) => DB + i * D + j * tTipo
D = dimensin_columna * tTipo
31
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________
Diapositiva32
Arreglosbidimensionales
Subndicesconrango
A[L1:U1,L2:U2]:TIPO
D=(U2 L2+1)*tTipo
Lvalue(A[i,j])=DB+D *(i L1)+tTipo *(j L2)
D=cte
Creacindeunarreglobidimensional:
Espacio=(U2 L2+1)*(U1 L1+1)*tTipo
D=(U2 L2+1)*tTipo
OV=DB L1*D L2*tTipo
Lvalue(A[i,j])=OV +(i L1)*D +(j L2)*tTipo
UTN - FRM - SSL: Proceso de traduccin
32
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________
Diapositiva33
Implementacingeneral
Almacenamiento
a)Esttico(datosconocidosenlacompilacin:D,TyVO)
int N = 5;
float v[N];
for (int i = 0; i < N; i++)
v[i] = i + 1;
b)Dinmico
var v = [0];
for (i = 0; i < 5; i++)
v[i] = i + 1;
33
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________
Diapositiva34
Arreglostridimensionales
Subndicesconrango
k
j
A[L1:U1,L2:U2,L3:U3]:TIPO
i
34
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________
Diapositiva35
Arreglosndimensionales
Paradimensionesconrango:
A[L1:U1,...,Ln:Un]
mn =tTipo
Tamaodecadadimensinmi
Parai=n 1hasta1hacer
mi =(Ui+1 Li+1 +1)*mi+1
OV=DB ni=1(Li *mi)
Accesoaunelemento
A[s1,...,sn]=OV + ni=1((si Li )*mi )
35
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________
Diapositiva36
Diferentes clasesdearreglos
Slices
Seagregandescriptores
EjemploFortran90:
A(3,:)=B(7:15)
Asociativos
Accesoadatossinunordenfijo
Nombrescomosubndices
Implementacincondescriptor
EjemploJS
var items ={"tucuman":12,"cordoba": 19,"salta":21,"jujuy":31,"merlo":47,
"catamarca":51,"mendoza":61,"rosario":73,"corrientes":88};
listString ="";
for (var word initems)listString +=items[word]+",";
alert(listString);
UTN - FRM - SSL: Proceso de traduccin
36
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________
Diapositiva37
Mapadememoriadedatos
Mapadememoria
37
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________
Diapositiva38
Stack vs.Heap
Almacenamientodinmico
mbitodereferencia
Tiempodevidadelobjetodedato
void main(){
char *s,*q,t[5];
s=(char *)malloc(9);
strcpy(t,"dos");
strcpy(s,"uno");
strcat(s,t);
q=s;
free(s);
...
puts(q);
}
heap uu nn oo \0
d o s \0
stack
*s *q
s \0
38
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________
Diapositiva39
GestindelHeap
Estados
posiblesde
celdas
Asignacin
bloques
Mtodosde
reclamode
basura
Tamaonico
Contadorde
referencias
Tamaovariable
Recoleccinde
basura
Libre:sinreferenciasy
marcadalibre
Ocupada:con
referenciasymarcada
ocupada
Basura:sinreferencias
ymarcadaocupada
Colgada:con
referenciasymarcada
libre
39
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________
Diapositiva40
Tcnicasparaevitardangling
Lpidas y tumbas
Debe usar contador de referencias para garantizar el no dejar referencias colgadas
El apuntador contiene la direccin de la lpida y esta la del objeto
Al liberar objeto, se asigna en la lpida un nulo
Complejidad en tiempo:
- creacin de lpidas cuando se alojan objetos
- chequear validacin en cada acceso
- doble indireccin para acceso
Uso de espacio:
- espacio extra para las lpidas
- nunca desalojar lpidas o poner contador de referencia a cada lpida
Llaves y cerraduras
Debe usar contador de referencias para garantizar el no dejar referencias colgadas
Deben coincidir los valores de lock y key
Al desalojar objeto, coloca un nulo en lock
Complejidad en tiempo:
- comparacin de cerraduras y llaves en cada acceso
Uso de espacio:
- espacio extra para las cerraduras en cada apuntador
y objeto del heap
UTN - FRM - SSL: Proceso de traduccin
40
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________
Diapositiva41
Enumeraciones
Sedefineunnombreparacada valor
Smbolosasociados anmerosenteros
Nosoncadenas
Valoresdelaenumeracininicializados
NosoportanI/O
enum Color{Rojo,Verde, Azul};
enum OtroColor {otroRojo =3,otroVerde =2,otroAzul =2};
enum Colorx=Verde, z=Azul;
enum OtroColor y;
x=x+1;
x=z x;
y=otroAzul otroVerde;
41
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________
Diapositiva42
Registros
struct AUTO{
charmarca[10];
floatprecio;
unsignedmodelo;
chart;
}miAuto;
struct PERSONA{
unsigned int DNI;
char nombre[20];
struct FECHA{
unsigned int d;
unsigned int m;
unsigned int a;
}nacido;
};
struct PERSONAel,ella;
miAuto
marca
precio
10
modelo
17
Estructurayalineacin
Tamao
Referenciaamiembros
Direccionesdememoria
Asignaciones
Punterosamiembros
42
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________
Diapositiva43
Implementacinderegistros
Conjunto heterogneo de datos gestionados como un bloque
struct Alumno{
unsigned int legajo;
char nombre[20];
unsigned long dni;
};
Alumno
24569
Juan
legajo
32456987
unsigned int
direccin
struct Alumnox,*p;
nombre
x.legajo =24567;
char[20]
strcpy(x.nombre, Juan);
direccin
x.dni=30768435;
dni
unsigned long
p=&x;
direccin
43
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________
Diapositiva44
Uniones
struct LEASING{
unsigned int cuotas;
float valor;
};
struct CONTADO{
float monto;
char cheque;
};
union MODO{
struct LEASINGa;
struct CONTADOb;
};
enum Discr {leasing,contado};
struct VENTA {
union MODOventa;
Discr tipo;
}operacion[100];
UTN - FRM - SSL: Proceso de traduccin
44
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________
Diapositiva45
Camposdebits
Fraccionar en bits el espacio de almacenamiento
struct FECHA{
unsigned int dia :5;
unsigned int mes:4;
unsigned int anio :7;
}ingreso;
ingreso.dia = 19;
// 10011
ingreso.mes = 27;
// 11011
ingreso.anio = 7;
// 111
Tamaos
Punteros
Acceso
Alineacindecampos
I/O
45
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________
Diapositiva46
Archivos
Almacenamiento
Formato
Persistente(discos,
pendrivers,CD,DVD,
etc.)
S.O.usabufferspara
I/O
Texto(secuenciade
bytes,segnformato)
Binario(secuenciade
bytesaimagendela
memoria)
Apertura
Acceso
Operaciones
Lectura
Estructura
Bytes(conusoono
deseparadores)
Registros
Modo
Secuencial
Modo
Directo
Modo
Indexado
Escritura
Cierre
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________
Diapositiva47
Archivos
Mapadememoria
UTN - FRM - SSL: Proceso de traduccin
47
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________
Diapositiva48
Tiposrecursivos
Almacenamientodinmico
Tamaoajustable
Implementacinderboles,pilas,colas,etc.
struct CIUDAD{
char nombre[15];
unsigned int dist;
struct CIUDAD*prox;
}*primero;
48
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________
Diapositiva49
Generacindelistasimplemente enlazada
typedef struct DATO{
char nombre[10];
struct DATO *prox;
} NODO;
stack
*p
*r
heap
nombre prox
NULL
nombre prox
NULL
nombre prox
NULL
49
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________
Diapositiva50
Destruccindelistasimplemente enlazada
void destruir(NODO *p){
NODO *r;
while (p){
r = p->prox;
free(p);
p = r;
}
}
...
NODO *primero = crear(3);
...
destruir(primero);
stack
*p
*r
heap
nombre prox
nombre prox
nombre prox
NULL
50
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________
Diapositiva51
Subprogramasosubrutinas
Implementan laabstraccin deprocesos
Procedimientos
Definen nuevos enunciados (sentencias)
Pueden modificar variableslocalesdelarutina llamadora
Localidad dedatos
Acceso adatos globales
Funciones
Definen nuevas operaciones
Regresan unvalor
Localidad dedatos
Programa
osubrutina
llamada
Subrutina
(funcin o
procedimiento)
Corutinas
Paralelismo
51
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________
Diapositiva52
Registrodeactivacin
Definido durante la traduccin (prlogo + cuerpo + eplogo)
Creado al invocar la subrutina y destruido al finalizar
Almacena variables locales y enlaces a otros contextos
Alojado en el stack (imperativos) o el heap (declarativos)
int sum(int a,int b){
int r;
r=a+b;
return r;
}
void main(){
int x=5,y,r;
y=6;
r=sum(x,y); 11
cout <<r;
}
UTN - FRM - SSL: Proceso de traduccin
11
11
52
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________
Diapositiva53
Invocacindeunasubrutina
Llamada
Ejecucin
Retorno
Ponerenlapilalosargumentos
Guardarpuntoderetorno
Ponerinformacindevnculos
Llamaralarutina
Guardarelframepointer anterior
Asignarnuevoframepointer
Crearespacioparavariableslocales
Limpiarvariableslocales
Restaurarframepointer
Devolverelcontrolalpuntodellamada
53
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________
Diapositiva54
Pasajedeargumentos
54
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________
Diapositiva55
Pasajedeargumentosporvalor
(300) (302)
3
stack
55
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________
Diapositiva56
Pasajedeargumentosporreferencia
void permutar(int &x,int
&y){
int r;
r=x;
x=y;
y=r;
}
void main(){
int a,b;
a=3;
b=7;
permutar(a,b);
cout <<a<<b;
}
*x
*y
302
(300) (302)
37
73
stack
56
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________
Diapositiva57
Pasajedeargumentosporresultado
proc permutar(x,y,m,p:integer)
m:=y;
p:=x;
end proc
prog main
a,b:integer;
a:=3;
b:=4;
permutar(a,a+b,a,b);
print(a,b);
end prog
300
302
(300) (302)
37
34
stack
57
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________
Diapositiva58
Pasajedeargumentosporvalorresultado
proc permutar(x,y:integer)
r:integer;
r:=x;
x:=y;
y:=r;
end proc
prog main
a,b:integer;
a:=3;
b:=7;
permutar(a,b);
print(a,b);
end prog
73
(300) (302)
7
3
7
3
stack
58
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________
Diapositiva59
Pasajedeargumentospornombre
proc permutar(x,y,m,p:integer)
m:=y; a := b = a := 4
p:=x; b := (a + b) = b := 4 + 4
end proc
prog main
a,b:integer;
a:=3;
b:=4;
permutar(a+b,b,a,b);
print(a,b);
end prog
302
300
302
(300) (302)
4
3
8
4
stack
59
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________
Diapositiva60
Pasajedeargumentospreinicializados
proc permutar(x,y,m,p:integer)
m:=y; a := b = a := 4
p:=x; b := (a + b) = b := 4 + 4
end proc
prog main
a,b:integer;
a:=3;
b:=4;
permutar(a+b,b,a,b);
print(a,b);
end prog
302
300
302
(300) (302)
4
3
8
4
stack
60
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________
Diapositiva61
Pasajedeargumentosconstantes
proc permutar(p:constanteinteger)
m:integer;
m:=p;
p:=10;
end proc
prog main
a,b:integer;
a:=3;
b:=4;
permutar(a+b,b,a,b);
print(a,b);
end prog
exp
302
300
302
(300) (302)
4
3
8
4
stack
61
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________
Diapositiva62
Llamadaafuncinrecursiva
62
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________
Diapositiva63
Registrodeactivacinyformasrecursivas
Normal
Transitiva
rutina(parmetros) {
if (??) rutina(argumentos)
rutinaA(parmetros) {
if (??) rutinaB(argumentos)
}
rutinaB(parmetros) {
rutinaA(argumentos)
De cola
Se usa cuando no es necesario retornar
a la subrutina.
tipo funcin(parmetros) {
63
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________
Diapositiva64
Organizacindememoriaparaunprograma
0x00000000
stack
local vars
parameters
framepointers
ret address
0x0012FFFF
0xFFFF0000
Argumentos del programa
Stack
DS
Heap
0x00401000
code
0x0040a000
data
bss
heap
exe Code
dll Code
globals
statics
jumptables
Static/Global
CS
Code
0x00000000
dynamic data
dyn objects
mallocs
64
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________
Diapositiva65
mbitosdeunasubrutina
char*func(char*M){
constint initval=2;
char*x="igual";
strcpy(x,(M+initval));
returnx;
}
chars[10]="alguna";
cout <<func(s)<<endl;
Cdigoejecutable
Registrodeactivacin
Instruccionesparacrear
elregistrodeactivacin
Puntoderetorno
Almacenamiento temporal
Otrosdatos
Cdigoejecutable
Instruccionespara
destruirelregistro
Valorretornado (func)
M[]:parmetro
initval:const local
igual
x:local
Qu ocurre alejecutarlo?
Motivo deloserrores?
Registro
Registro
(endatasegment)
(endatasegment)
Registro
(endatasegment)
Cdigo
(codesegment)
65
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________
Diapositiva66
Informacinsobresmbolosdeunasubrutina
Alcanceytiempodevidadelossmbolos
Dinmico
Local
Global
Esttico
var n = -1;
accesible a partir del punto de
function func2(m) {
declaracin, desde todo el
programa, durante toda la ejecucin
var initval=2;
if (initval == 2) x = m[initval];
return n * x;
accesible slo
}
desde la funcin
accesible a partir de que se
function func1() {
donde se
ejecute el enunciado donde
var k;
aparece por primera vez
declara
with (Math) {
k = [sin(0.5), sin(0.5), sin(0.5)];
}
objeto de dato esttico, accesible
n = func2(k);
desde todo el programa, durante
alert(x + ", " + n);
toda la ejecucin
}
UTN - FRM - SSL: Proceso de traduccin
66
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________
Diapositiva67
mbitodealcance
O L1
Basadoeneltextodelprograma
Basadoenelflujodeejecucin
Discriminantedeacceso: mbito.id
Determinadopor elbloque donde se
declara
Alcance
Ambientedereferenciade
subrutinas
Variables
Dinmico
Nombresdesubrutinas
Ambientedereferenciade
subrutinas
Variables
Esttico
Determinadopor losmbitosdetodaslas
subrutinasllamadasdespus deesta
(hastaquealgunaredefinaelsmbolo)
67
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________
Diapositiva68
mbitodealcance
var cadena="hola";
function f(){
resultado=cadena+",unsaludo";
cadena="Hastaluego";
}
function ff (){
var cadena=0;
var resultado=0;
if (resultado==0){
var valor=1;
}
cadena=valor;
alert("ff>R:"+resultado);
alert("ff>C:"+cadena);
}
f();
alert("C:"+cadena+R:"+resultado);
ff();
alert("C:"+cadena+R:"+resultado);
#include <iostream>
using namespace std;
int count;
void func2(void){
extern int count;
for (count=1;count<10; count++)
cout <<".;
}
void func1(void){
int temp;
temp =count;
func2();
cout <<"count is <<count <<endl;
}
int main(){
count =100;
func1();
getchar();
}
68
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________
Diapositiva69
mbitodealcance
Reglasestticas: importaladeclaraciny dnde sehace
Reglasdinmicas: importasloladeclaracin
procedure P is
procedure Q is
procedure R is
S()
end R
R()
end Q
procedure S is
...
end S
Q()
end P
Clausuraocierre
Evaluacindeunafuncin enuncontexto
dondeseaccedeavariablesdeotro contexto
Esttico
Dinmico
Q
P
Q
P
69
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________
Diapositiva70
mbitodealcance
Bloquesdecdigo
Implementados como
subprogramas sin
parmetros
Reservando espacio
localenelregistro de
activacin
JS
function sumaCuadrados(a, b) {
function cuadrado(x) {
return x * x;
}
return cuadrado(a) + cuadrado(b);
}
...
C/C++ (implementa una union)
void P() {
int I;
...
if (...) {
int J;
...
}
while (...) {
int K, L;
...
}
}
70
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________
Diapositiva71
Referencia alcontexto
Cdigo
Almacenamiento
int x;
esttico(global)
dinmicoenstack
charch[100];
Code:main
foo
Esttico:x
Parmetros:void
Retorno:exit
Linkdinmico:void
Linkesttico
Variableslocales:y,str
Parmetros:z=23
Retorno
Linkdinmico
Linkesttico
Variableslocales:chr[]
Parmetros:z=7
Retorno
Linkdinmico
Linkesttico
Variableslocales:chr[]
dinmicoenstack
if(z==23)foo(7);
return 3;
}
voidmain(){
int y;
dinmicoenstack
char*str;
dinmicoenstack
str =malloc(100);
dinmicoenheap
y=foo(23);
free(str);
}
Heap:[]
71
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________
Diapositiva72
o1
P()Q()R()S()
Estructura del programa
Display
Cadena esttica
LE
Display
LD
R()
Datos
LD
Datos
LE
S()
Display
LD
Datos
LD
Datos
LE
Display
LD
Datos
LD
Datos
LE
Q()
Display
LD
LD
P
Datos
Datos
72
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________
Diapositiva73
Referenciaencontextosrecursivos
contexto global
...
procedure P is
procedure Q is
...
Q()
...
end
...
P()
...
end
...
contexto global
static links
display
contexto global
73
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________
Diapositiva74
Listavariabledeparmetros
Parmetros
voidA(int X,...){
int Y;
C(Y);
}
voidB(floatR){
int S;
int T;
A(S);
}
voidC(int Q){
//hace algo
}
voidmain(){
floatP;
B(P);
}
Linkdinmico
Linkesttico
Retorno a:A
Parmetros
Parmetros
A Local:X,Y
Linkdinmico
Param_n
Param_2
Param_1
Linkesttico
Retorno a:B
Parmetros
Local:S,T
B Linkdinmico
Linkesttico
Retorno a:main
main Local:P
74
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________
Diapositiva75
Punterosafunciones
Pasajedeparmetrospornombre
Funcionesdeordensuperior
Forma: tipo devuelto (*var) (tipos args)
Forma: Function (arg {, arg}*, cuerpo)
floatuna(int a){return1;}
floatdos(int a){return2;}
var suma=newFunction("x",
floattres(int
a){return3;}
"y",
"var a=x*x,
int main() {
b=y*y;
float (*q[]) (int) ={una,dos,tres};
for(int k=0;k<3;k++) return a+b");
var rptcout
=suma(2,3);
<<(*q[k])(k<<endl);
} alert(rpt);
75
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________________________________________________________________________
_____________