Está en la página 1de 3

Ms que compiladores e intrpretes

Ignacio Trejos Zelaya


Escuela de Ing. en Computacin, TEC
y Universidad Cenfotec
itrejos@ucenfotec.ac.cr
1 Introduccin

Un curso sobre compiladores es frecuente en carreras de grado en Computacin. La carrera
de Ingeniera en Computacin del Instituto Tecnolgico de Costa Rica ha contado, desde hace
ms de tres dcadas, con algn curso donde se estudian los problemas relacionados con la
implementacin de lenguajes de programacin. En 1997, antes de un cambio curricular, se
discuti la posibilidad de eliminar tal curso, pero este prevaleci con el nombre Compiladores e
intrpretes. El curso se ubica en el quinto semestre de la carrera.

La descripcin del curso reza: Este curso estudia principios y tcnicas necesarios para la
construccin de procesadores de lenguajes de programacin, con nfasis en compiladores e
intrpretes. y contina (nfasis nuestro): El aprendizaje permite aplicar modelos abstractos
(lenguajes formales y autmatas), enfrentar problemas de manipulacin de informacin
simblica, realizar programacin modular avanzada, analizar sistemas complejos de software y
hacer modificaciones sistemticas, y ampliar el repertorio de mtodos para resolucin de
problemas informticos..

El desarrollo de un compilador es una de las primeras experiencias que tendr un estudiante
de Computacin para disear y escribir programas de un tamao superior a 2,000 lneas de
cdigo, de mediana complejidad, y con el respaldo de desarrollos conceptuales y tericos slidos
para sus decisiones de diseo y construccin. Antes de esto, los estudiantes habrn tenido unos
seis cursos relacionados con programacin, algortmica, estructura de datos y lenguajes de
programacin. Un curso en que desarrolle el procesador de un lenguaje de programacin es un
lugar propicio para estudiar y aplicar buenas prcticas de Ingeniera del software.

Hay buenos libros para apoyar un curso que verse sobre compiladores, tales como el clsico
denominado del dragn (Aho, Lam, Sethi, & Ullman, 2007). Muchos profesores usan partes de
este extenso libro, cuyos alcances desbordan lo que pueda desarrollarse en un semestre. El autor
decidi usar otra fuente, el libro Programming Language Processors in Java: Compilers and
Interpreters (Watt & Brown, 2000), que es una edicin moderna de un libro que haba utilizado
anteriormente (Watt, 1993). Estos libros exponen principios y tcnicas para la construccin de
un compilador y una mquina abstracta, y cuentan con la implementacin completa de un
pequeo lenguaje imperativo y su mquina abstracta. Ambos estn diseados sistemticamente a
partir de tcnicas de compilacin e interpretacin expuestas en los libros, junto con prcticas de
programacin modulares (en Pascal) u orientadas a objetos (Java), segn la edicin.

2 Metodologa

El profesor desarrolla de manera magistral los aspectos tericos y prcticos de los diferentes
temas. Esto se complementa con otras lecturas y cdigo ejemplo. El libro de (Watt & Brown,
2000) es la base para la mayor parte de curso, pero el profesor ha desarrollado intrpretes
ilustrativos escritos en Standard ML, para explicar la construccin de prototipos de lenguajes de
programacin basada en principios semnticos.

El profesor explica el proceso general de compilacin y las posibles arquitecturas de
software para resolverlo, haciendo nfasis en la conexin entre las fases del procesador, las
tcnicas disponibles y los componentes de software por construir. La teora se hace corresponder
con el compilador y los intrpretes que ejemplifican los mtodos de solucin, para lenguajes
representativos de los paradigmas imperativo y funcional.

El componente esencial del aprendizaje y de la evaluacin del curso son los proyectos de
programacin. Estos, por lo general, son cuatro: Un compilador y dos intrpretes. El
compilador es construido en dos proyectos: 1) fases de anlisis lxico, sintctico y contextual; 2)
fases de generacin e interpretacin del cdigo. Un intrprete implementa un lenguaje funcional,
mientras que el otro interpreta un lenguaje imperativo.

Al contar con bases previamente construidas, el profesor plantea extensiones a los lenguajes
fuente originales, de manera que todos los aspectos de compilacin e interpretacin deban ser
resueltos, pero sin necesidad de escribir desde cero la totalidad del procesador del lenguaje. El
desarrollo de los proyectos promueve el aprendizaje de tcnicas de desarrollo y mantenimiento
de software.

3 Evaluacin

Variantes de este curso han sido impartidas por el autor desde 1994. Con la ayuda de
asistentes, se implementaron pequeos ambientes de desarrollo interactivos (IDE), a los que los
estudiantes onectan sus compiladores. Los IDE dan un sentido de realismo a los proyectos
relacionados con compilacin y resultan muy motivadores.

Los proyectos generalmente incluyen retos adicionales, que dan puntos extra. Cerca de un
30% de los estudiantes abordan exitosamente la solucin de los problemas adicionales. El
profesor desestimula que los estudiantes hagan nuevos IDE, para evitar que se distraigan con
temas fuera de los alcances del curso.

Los estudiantes primero reaccionan adversamente al enfrentarse a modificar cdigo escrito
por terceros. Luego se dan cuenta de que el cdigo est bien estructurado y que las tcnicas
explicadas en clase y el libro dan buen fundamento a las partes de compilador o el intrprete que
debern modificar. El profesor insiste en que primero estudien las tcnicas y el cdigo, de
manera anloga a como un cirujano (que sabe de anatoma) planea previamente una intervencin
quirrgica. Hay intencin en esto, el profesor desea que los estudiantes aprendan de buenas
prcticas mediante su observacin y diseccin, que se enfrenten a modismos y estilos distintos de
los propios, que prueben (a pequea escala) algunas de las dificultades que conlleva el
mantenimiento de software y reflexionen sobre las caractersticas de un producto de software que
podran obstaculizar su comprensin, modificacin, extensin o evolucin.

En el caso de los intrpretes, los proyectos son menores en envergadura y no estn anclados
a un IDE. El nfasis aqu es en la semntica de los lenguajes por interpretar y en el uso del
intrprete para hacer un prototipo del lenguaje que permita explorar sus propiedades

Al finalizar el curso, los estudiantes mayoritariamente admiten que han aprendido no
solamente de compilacin e interpretacin, sino que han comprendido en mayor profundidad los
lenguajes de programacin (y sus paradigmas), han experimentado con tcnicas de diseo
(patrones diversos), comprendido los rudimentos de la arquitectura de software, enfrentado la
construccin de extensiones significativas y no triviales a programas de ms de 5,000 lneas de
cdigo, resolviendo las tensiones que esto conlleva.

Con la ayuda de asistentes, se ha construido (en el lenguaje OCaML) un prototipo parcial
de una familia de compiladores modulares, que ilustra mejor la sustituibilidad de los
componentes a cargo de las tareas de compilacin e interpretacin en el marco de una
arquitectura definida mediante interfaces especificadas precisamente. Algunos de los
componentes admiten su construccin mediante diversas tcnicas y hasta ser generados
automticamente (anlisis lxico, anlisis sintctico). Este trabajo no ha sido concluido, pero
abrira el espacio para una futura edicin de este curso.


4 Bibliografa
Aho, A., Lam, M., Sethi, R., & Ullman, J. (2007). Compilers: Principles, techniques and tools,
2nd. Ed. Boston: Addison-Wesley.
Watt, D. (1993). Programming language processors. Londres: Prentice Hall.
Watt, D., & Brown, D. (2000). Programming Language Processors in Java: Compilers and
Interpreters. Harlow: Prentice Hall.

También podría gustarte