Professional Documents
Culture Documents
Introduccin
Imperativos
von Neumann: C, Ada, Fortran, ...
Scripting: Perl, Python, PHP,
Orientados a objetos: Smalltalk, Eiffel, Java,
Los lenguajes funcionales utilizan modelo
computacional basado en la definicin
recursiva de funciones, toman su inspiracin en
el clculo lambda un modelo computacional
formal desarrollado por Alonzo Church en los
1930's.
1.2 El Abanico de los Lenguajes
; Scheme
(define gcd
(lambda (a b)
(cond ((= a b) a)
((> a b) (gcd (- a b) b))
(else (gcd (- b a) a)))))
1.2 El Abanico de los Lenguajes
% Prolog
gcd(A,B,G) :- A = B, G = A.
gcd(A,B,G) :- A > B, C is A-B, gcd(C,B,G).
gcd(A,B,G) :- B > A, C is B-A,
gcd(C,A,G).
1.3 Por qu Estudiar Lenguajes de
Programacin?
Para saber seleccionar el lenguaje adecuado
recordando la frase de Charles Hoare.
Para aprender nuevos lenguajes fcilmente.
Para saberlos aprovechar mejor al conocerlos
internamente.
1.3 Por qu Estudiar Lenguajes de
Programacin?
Algunos de los beneficios son:
Entender caractersticas oscuras.
Escoger correctamente entre formas alternativas de
expresar las cosas.
Hacer buen uso de los depuradores, enlazadores,
ensambladores.
Simular caractersticas tiles de un lenguaje en
otro.
Hacer uso de la tecnologa de lenguajes donde sea
que aparezca.
1.4 Compiladores e Intrpretes
Preprocesamiento:
Ocurre como un paso previo en la mayora de los
lenguajes interpretados (ej.: Lisp), un
preprocesador, remueve comentarios, espacios en
blanco y agrupa caracteres en tokens como
palabras clave, identificadores, nmeros y
smbolos, tambin podra expandir macros, e
incluso indentificar estructuras sintcticas de alto
nivel como ciclos y subrutinas, con el fin de obtener
un cdigo ms eficiente para interpretar.
1.4 Compiladores e Intrpretes
Ejemplo: ensamblado
posterior a la
compilacin, este libera
al compilador de
cambios en el lenguaje
de mquina, un mismo
ensamblador puede ser
usado por varios
compiladores
1.4 Compiladores e Intrpretes
Ejemplo: el
preprocesador de C,
remueve comentarios y
expande macros,
adems puede ser
instrudo para borrar
partes del cdigo,
proveyendo un
compilacin condicional
con el mismo cdigo:
1.4 Compiladores e Intrpretes
Ejemplo: traduccin de
cdigo fuente en C++ a
cdigo fuente en C. Es
una compilacin
completa pues el
compilador de C++
hace una anlisis
exhaustivo y provoca un
cambio significativo (no
directo) en el cdigo.
1.4 Compiladores e Intrpretes
Bootstrapping
Muchos compiladores estn escritos en el
lenguaje que compilan, para lograr esto se usa
una tcnica conocida como bootstrapping,
nombrada debido a la frase en ingls: pull
oneself up by one's bootstraps.
Bsicamente consiste en crear un pequea
implementacin del lenguaje y usar esta para ir
creando otras ms complejas.
1.4 Compiladores e Intrpretes
Ejemplo:
Si quisiermos empezar a construir el primer
compilador de Java y tuvisemos ya un compilador de
C, podramos iniciar escribiendo un pequeo
compilador para un subconjunto de Java en C usando
un pequeo subconjunto de C.
Luego podramos desarrollar usando el subconjunto
de Java y compilar el pequeo compilador de Java en
el compilador que ya tenemos y despus podramos
usar este compilador de Java escrito en Java para
desarrollar y compilar un compilador que acepte un
subconjunto mayor de Java y as sucesivamente.
1.4 Compiladores e Intrpretes
int main ( )
{ int i =
getint ( ) ,
j = getint (
) ; while (
i != j )
1.6.1 Anlisis Lxico y Sintctico
{ if ( i
> j ) i
= i - j
; else j =
j - i ;
} putint ( i
) ; }
1.6.1 Anlisis Lxico y Sintctico