We.Developers 013 – Compiladores

Como desarrolladores, pocas herramientas usaremos tan a menudo como un compilador. Ya sea independiente o integrado en algún entorno de desarrollo, el compilador es el responsable de transformar nuestras ideas, esos complejos castillos en el aire formados por algoritmos y estructuras de datos, en instrucciones básicas que pueda procesar la máquina. En este programa, analizamos con la ayuda de @m3drano la estructura y funciones de los compiladores e intérpretes, así como las diferentes fases que usa un compilador para comprender y procesar el código fuente. Sin duda, un compilador de un lenguaje de programación completo es una de las piezas de ingeniería de software mas complejas que nos podamos encontrar.

Junto a este episodio se encuentra una pequeña implementación de un compilador para un lenguaje que podría considerarse un subconjunto de C. Está implementado en Java, junto con B/Yacc y JFlex, versiones de las herramientas que comentamos en el podcast que generan código Java en lugar de C. Está diseñado como un compilador con parser ascendente implementado como gramática de Yacc, mientras que la implementación del análisis semántico se basa en una tabla de símbolos múltiple anidada y sucesivas visitas al AST para realizar anotaciones.

El código está estructurado como un proyecto para Eclipse, con lo que con usar la función de importación bastaría para tenerlo todo listo. Además, hay unos cuantos programas de ejemplo para demostrar la sintaxis del mini-lenguaje. Como siempre, está disponible en GitHub y Google Code.

Gracias, Grace.

Código fuente

Notas del Programa