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
- ul @ GitHub (github.com)
- ul @ Google Code (code.google.com)
Notas del Programa
- Tenzing: A SQL Implementation On The MapReduce Framework (research.google.com)
- C modules (llvm.org)
- Life of an instruction in LLVM (eli.thegreenplace.net)
- From Source to Binary: The Inner Workings of GCC (redhat.com)
- The LLVM Compiler System (llvm.org)
- Let’s build a compiler (compilers.iecc.com)
- Writing Your Own Toy Compiler Using Flex, Bison and LLVM (gnuu.org)
- Introducing cling, a C++ Interpreter Based on clang/LLVM (youtube.com)
- Compilers: principles, techniques and tools (books.google.com)
Podcast: Play in new window | Download (Duration: 1:31:22 — 42.0MB)