La madurez del área de compiladores es ejemplar en las Ciencias de la Computación. En sus inicios se ha desarrollado una teoría fundamental que con la
evolución ha sido usada para dar soporte a sistemas cada vez más complejos de generación de programas.
Sin embargo las técnicas desarrolladas con los años son aplicables a muchos
problemas cotidianos. Hoy en día muchos problemas se reducen al recorrido de estructuras (que en compiladores se llaman árboles de sintaxis abstracta)
con el fin de extraer información a partir de la estructura, a la serialización
y estructuración de flujos de información y a construir lenguajes de dominio
específicos (que son lenguajes que describen la abstracción de un dominio de
aplicación).
Las herramientas fundamentales usadas en el curso y que acortan la brecha semántica existente entre especificación e implementación son:
La programación funcional permite especificar directamente el front-end del
compilador usando análisis sintáctico recursivo descendente.
Herramientas para la generación de procesadores de lenguajes basadas en
gramáticas de atributos por mucho tiempo han sido implementadas usando lenguajes
estrictos. Una consecuencia de esto es que hay que planificar el cálculo de
atributos, resultando en código adicional en el compilador generado. Los lenguajes
no estrictos como Haskell calculan los resultados por demanda, y es así que
esa parte del compilador se implementa automáticamente con este mecanismo
incrustado en el lenguaje. La consecuencia de esto y del uso de otros sublenguajes
para implementar los analizadores sintácticos y el scanner se tiene que
en la implementación del compilador se reduce al uso de un único lenguaje de
programación: Haskell. Esto acorta notablemente el ciclo de desarrollo de un
compilador, permitiendo experimentar con diseños de lenguajes en forma ágil.
En este plan se propone un estudio y ejercitación de las técnicas de programación basadas en estructuras formales que se han desarrollado en el área de compiladores. Así, al finalizar este curso se espera que el estudiante sea capaz de:
Los objetivos de esta materia son: