Professional Documents
Culture Documents
GENERALIDADES
Importancia de un Lenguaje
Importancia de un
Lenguaje
Caractersticas Deseables
Caractersticas Deseables
Rapidez de aprendizaje
Integridad conceptual (pocos conceptos)
Ortogonalidad (composicin de abstracciones,
pocos casos especiales)
Expresividad
Rapidez de programacin
Legibilidad
Evolucin de Conceptos
Evolucin de conceptos
ABSTRACCIN DE DATOS
Tipos simples
Tipos compuestos
Tipos abstractos
Evolucin de conceptos
10
Sentencias
Asignacin
Seleccin (simple, doble y mltiple)
Repeticin(con expresin
con variable de control)
booleana
Entrada-Salida
Invocacin
11
Unidades de
programas
Favorecen la programacin modular
Generalizan la nocin de operador
Permiten encapsular parte de un
algoritmo
Tienen una nica definicin
Posibilitan mltiples activaciones
12
13
Clasificacin
Lenguaje
s
Naturales
De Programaci
n
De Mquina
Simblicos
Bajo nivel
Alto Nivel
Imperativos
Declarativos
OO
OW
Concurrentes
14
Niveles de abstraccin
C++
Pascal
C F
orTra
n
Ensamblador
es
Mquin
a
COBOL
Mayor nivel
de
abstraccin
Delphi
he
c
S
e
Pyt
Java
ho n
C#
Ruby
15
Lenguajes Imperativos
Surgen como los primeros lenguajes de alto
nivel: Fortran, COBOL, Pascal, C, Ada
Se denominan tambin procedurales
Se caracterizan por cambiar el estado de las
variables mediante asignacin
Segn Wirth
Programa = Algoritmos + Estructuras de
Datos
Es
imprescindible conocer la naturaleza
(tipo) de los datos
16
Lenguajes Declarativos
Declaran
condiciones,
proposiciones,
afirmaciones, restricciones, ecuaciones o
transformaciones
Describen qu hacer y no cmo hacer
No existen la asignacin ni la tipificacin
Segn Kowalski Programa = Lgica + Control
Las variables estn dotadas de transparencia
referencial
La computacin se entiende como un conjunto
de relaciones de inferencia entre objetos
17
Lenguajes Declarativos
Se subclasifican en:
Lisp
Haskell
Prolog
Gdel
SQL
Maude
18
Lenguajes Funcionales
Aplican
funciones,
ya
recursivamente o por composicin
sea,
19
Lenguajes
Funcionales
Ejemplo en Scheme:
Funcin f(x) = (x + 1)2 + (2x)2
(define (cuad x) (* x x))
(define (sum x y) (+ x y))
(define (mult x y) (* x y))
(define (f x) (sum (cuad (sum x 1)) (cuad (mult 2
x))))
(f 2)
25
20
Lenguajes OO
Lenguajes OW
Desarrollo: JavaScript,
Dart, Haxe
Destinados
a
la
programacin
aplicaciones
soportadas
por
navegadores web
PHP,
Ruby,
de
los
22
Lenguajes
Concurrentes
Las
aplicaciones
son
subprocesos
denominados tareas (tasks), hilos (threads) o
actores (actors)
Dado
que
los
subprocesos
comparten
recursos, los lenguajes concurrentes deben
facilitar tanto la exclusin mutua como la
sincronizacin
Ranking de Lenguajes
Visitar el ndice mensual TIOBE de
popularidad
de
los
lenguajes
de
programacin a nivel mundial, basado en la
opinin
de
ingenieros
informticos
calificados, de oferentes de capacitacin y
de proveedores de software.
http://www.tiobe.com/index.php/conte
nt/paperinfo/tpci/index.html
24
Sintaxis
25
Sintaxis
26
Elementos
Sintcticos
Set de caracteres
Identificadores
Smbolos para operadores
Palabras claves y reservadas
Comentarios
Delimitadores
Expresiones
Sentencias
Unidades de programas
27
Gramticas
28
Gramtica
Representa la definicin formal de
la sintaxis de un lenguaje
Consta de un conjunto de reglas que
especifican las NORMAS de escritura
para formar estructuras en un lenguaje
29
Metalenguaje
Gramtica formal destinada a la
descripcin de la sintaxis de un lenguaje
El
mximo
exponente
de
los
metalenguajes es BNF (Backus-NaurForm), a partir del cual derivan CBL
(COBOL-Like) y los Diagramas sintcticos
30
BNF
Notacin desarrollada por los especialistas
Backus y Naur para definir lenguaje Algol 60
Metasmbolos:
<
::=
|: "o"
identificador: Palabra reservada, constante o smbolo
TERMINAL
31
BNF
Nmero entero sin signo
<entero sin signo> ::=
signo>
<dgito> ::= 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9
Nmero real sin signo
<real sin signo> ::= <secuencia> . <secuencia>
<secuencia> ::= <dgito> | <dgito> <secuencia>
<dgito> ::= 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9
32
BNF
Sentencia if
<s-if> ::= if ( <expresin booleana> ) <sentencia> |
if ( <expresin booleana> ) <sentencia> else
<sentencia>
Sentencia while
<s-while> ::= while ( <expresin booleana> ) <sentencia>
Sentencia do-while
<s-do-while> ::= do <sentencia> while (<expresin
booleana> )
33
BNF
<identificador> ::= <letra> | <letra> <secuencia>
<secuencia> ::= <carcter> | <carcter> <secuencia>
<carcter> ::= <letra> | <dgito>
<letra> ::= A | B | | Z | a | b | | z
Multilista: (1 2 (3 4 (5) 6) 7 8)
<mlista> ::= () | (<lista>)
<lista> ::= <elemento> | <elemento> <lista>
<elemento> ::= <tomo> | <mlista>
34
BNF
Sentencia
<sentencia> ::= <simple> | <compuesta>
<simple> ::= <asignacin> | <invocacin> | <seleccin> |
<repeticin>
<compuesta> ::= {<sentencias>}
<sentencias> ::= <simple>; | <simple>; <sentencias>
35
BNF
Expresin aritmtica
a*b c/d
x
trmin
o
<ea> ::=
trmin
o
trmin
o
a * b
factor
factor
Semntica
37
Semntica
Sintaxis
Semntica
38
Semntica
Existen cuatro modelos de especificacin
significado de los constructores sintcticos:
del
Semntica descriptiva
Notacin usada por los diccionarios enciclopdicos
Semntica operacional (Plotkin)
Orientada a la implementacin del lenguaje, el
significado se define mediante una mquina
abstracta (con estados) y secuencias de cmputos
sobre dicha mquina
39
Semntica
Semntica axiomtica (Floyd-Hoare)
Orientada al uso del lenguaje, el significado se
establece mediante sentencias lgicas sobre el
efecto de la ejecucin de un programa
Semntica denotacional (Scott-Strachey)
Orientada al diseo del lenguaje, el significado se
modela como entidad matemtica (en general una
funcin), estando presente an la nocin de estado
40
Procesadores de Lenguajes
41
Procesador
DEFINICIN
Un procesador es una mquina capaz de
ejecutar acciones expresadas en algn
lenguaje concreto
Actualmente, el nico lenguaje concreto que
existe es el lenguaje de mquina
42
Traductor
Es un decodificador que acepta programas escritos en
algn lenguaje fuente y genera programas, funcionalmente
equivalentes, en algn lenguaje objeto
Programa en
Lenguaje Fuente
Traductor
Programa en
Lenguaje Objeto
Preprocesador
Compilador
Ensamblador
Ligador
Cargador
43
Pre-procesador
Es un traductor cuyo
lenguaje fuente es una extensin de un lenguaje de alto nivel
lenguaje objeto es el estndar del lenguaje de alto nivel
Pre-procesador
C++
Preprocesador
Compilador
Ensamblador
Leng.
Ensam.
Programa en
LAN estndar
Cargador
Cdigo
Reubicable
Cdigo
Ejecutable
44
Pre-procesador
#define entero int
#define si if
#define mientras while
#define retornar return
entero prod(entero x, entero y){
entero z=0;
mientras(y){
si(y%2) z += x;
x *= 2;
y /= 2;
}
retornar z;
}
45
Compilador
Es un traductor cuyo
lenguaje fuente es un lenguaje de alto nivel
lenguaje
objeto es un lenguaje orientado a la
mquina
Programa en
lenguaje de alto
nivel
Cdigo Fuente
Compilador
Fases de
Compilacin
Programa en
lenguaje orientado a
la mquina
Cdigo Objeto
Anlisis lxico
Anlisis sintctico
Anlisis semntico
Generacin de cdigo
intermedio
Generacin de cdigo
ejecutable
46
Compilador
Anlisis lxico
Reconocimiento y clasificacin de tokens bsicos:
Constantes
Identificadores
Palabras reservadas, etc.
Construccin de la tabla de smbolos
Lista de todos los smbolos y sus atributos usados en un
programa (variables, etiquetas, rutinas, etc)
47
Compilador
Anlisis sintctico
Generacin del rbol sintctico del programa fuente, en el
cual:
Las hojas corresponden a los tokens
Los nodos internos representan reducciones gramaticales
La raz constituye el nodo inicial de la gramtica del lenguaje
48
Compilador
Anlisis sintctico
a + b*c
Expresin
Trmino +
Expresin
Factor
Trmino
IdentificadorFacto Trmino
*
r
IdentificadorFactor
a
b
Identificad
or
c
49
Compilador
Anlisis semntico
Anlisis de tipos
Aplicacin de reglas de inferencia para determinar el
tipo las expresiones
Consistencia semntica del rbol sintctico
Coherencia entre operadores y operandos
50
Compilador
Generacin de cdigo intermedio
Convierte el programa en un cdigo de mquina abstracto
(independiente de la arquitectura del procesador de
destino)
lista
51
Compilador
Generacin de cdigo intermedio
while((a>b) && (a<=2*b 4)) a = a +b;
L1:
if(a>b) goto L2;
goto L3;
L2:
t1 = 2*b;
t2 = t1 4;
if(a <= t2) goto L4;
goto L3;
L4:
a = a + b;
goto L1;
L3:
52
Compilador
Optimizacin de cdigo intermedio
Objetivo: obtener un cdigo ejecutable eficiente segn los
criterios de optimizacin tanto temporal como espacial
Funcionamiento: revisa el cdigo generado segn los
niveles de abstraccin fijados y aplica las optimizaciones
que correspondan
Condiciones: el cdigo optimizado debe demandar menos
tiempo
y
espacio
que
la
versin
previa;
las
transformaciones aplicadas deben preservar la semntica
de los programas
53
Compilador
Optimizacin de cdigo intermedio
L1:
if(a<=b) goto L3;
t1 = 2*b;
t2 = t1 4;
if(a > t2) goto L3;
a = a + b;
goto L1;
L3:
54
Compilador
Optimizacin de cdigo intermedio
a = b + c + d;
e = b + c + f;
t1 = b + c;
a = t1 + d;
e = t1 + f;
55
Compilador
Optimizacin de cdigo intermedio
do {
b = 1;
a = a b;
} while(a ! = 0);
b = 1;
do {
a = a b;
} while(a ! = 0);
56
Compilador
Generacin del cdigo ejecutable
Existen dos enfoques:
Archivos binarios
Compilacin JIT (Just In Time), es decir, compilacin en
tiempo de ejecucin, conocida tambin como traduccin
dinmica
57
Compilador
58
Compilador
Archivos binarios
1.A partir del cdigo intermedio, el compilador genera un
programa en lenguaje ensamblador
2.Luego, el ensamblador genera un archivo binario del
programa, el cual es directamente ejecutable
3.Finalmente, el ncleo del sistema operativo ejecuta el
archivo binario, creando un proceso con su espacio de
direcciones
59
Compilador
Compilador JIT
1.El compilador JIT traduce cdigo intermedio (byte code) a
cdigo nativo (binario ejecutable), por lo cual es
dependiente de la plataforma
2.El cdigo intermedio se guarda en un archivo F
independiente
de
la
plataforma
y
distribuible
prescindiendo del cdigo fuente
3.La ejecucin de F implica la compilacin JIT de un
mtodo ante el envo del respectivo primer mensaje
60
Compilador
61
Ensamblador
Es un traductor cuyo
Lenguaje fuente es un lenguaje ensamblador
(representacin simblica del lenguaje de mquina)
Lenguaje objeto es el lenguaje de mquina del
computador
Programa en
Leng. Ensam.
Ensamblador
Programa en
LM
62
Ligador
Es un traductor cuyo
Lenguaje fuente es el lenguaje de mquina
Linker
Programa en
leng. de mquina
cdigo reubicable
63
Cargador
Es un traductor cuyo
Lenguaje fuente
es el cdigo reubicable (lenguaje de
mquina con direcciones relativas)
Loader
Programa
Ejecutable
Programa como
cdigo real
64
Intrprete
Es un procesador cuyo lenguaje concreto es un
lenguaje simblico
65
Intrprete
Interpretacin del cdigo fuente
El lenguaje simblico es un lenguaje de alto nivel
Cada vez que se ejecuta el programa, el intrprete realiza
las fases de compilacin desde el anlisis lxico hasta la
generacin de cdigo intermedio
Seguidamente, el intrprete decodifica y ejecuta ese
cdigo intermedio
66
Intrprete
Interpretacin del cdigo intermedio
El lenguaje simblico es un lenguaje de bajo nivel
El
cdigo intermedio se guarda en un archivo F
independiente
de
la
plataforma
y
distribuible
prescindiendo del cdigo fuente
El archivo F constituye una versin ejecutable por el
intrprete
La ejecucin del programa es realizada por el intrprete,
leyendo y decodificando cada una de las instrucciones del
archivo F.
67
Compilador-Intrprete
Compilador
Diferencia
s
Intrprete
Slo traduce
Decodifica y ejecuta
Acepta
segn
lgica
las
su
instrucciones
secuencialidad
68