En este curso aprenderás a crear tus propios traductores o intérpretes de lenguajes, que te permitirán correr en un lenguaje ya hecho algún otro lenguaje de programación.
Bibliografía de curso
- Compiladores: Principios, Técnicas y Herramientas.
- Programming language processors : compilers and interpreters, David A. Watt.
- Leeland Beck, An introduction to Systems programming, Addison Wesley.
- Ronald Mark, Writing compilers and Interpreters.
Definición de Compilador
Un compilador es un programa que traduce un lenguaje informático a un lenguaje máquina o en su caso a un lenguaje ejecutable.
Partes de un compilador
Un compilador esencialmente se conforma de los siguientes elementos:
- Front End
- Analizador Léxico
- Analizador Sintáctico
- Símbolos
- Back End
- Generador de código
- Enlazador
Front End de un compilador
Es un conjunto de componentes totalmente portables que conforman a un compilador.
Back End de un compilador
Es el conjunto de componentes que son totalmente dependientes de una arquitectura real o virtual. Para el caso de los códigos ejecutables, es imprescindible en enlazador o linker por su nombre en inglés.
Fases de compilación
Conceptualmente un compilador opera en varias etapas o fases de compilación, cada una de las cuales cambia la representación del programa.
El diagrama fue creado con el software plantUML con mediante el siguiente código:
@startuml
title "Fases de compilación"
state "Código Fuente" as fuente
state "Análisis Léxico" as lexico
state "Manejo de errores" as errores
state "Administración de la tabla de símbolos" as tabla
state "Análisis Sintáctico" as sintactico
state "Análisis Semántico" as semantico
state "Generación de código intermedio" as intermedio
state "Optimización de código" as optimizador
state "Generación de código ejecutable" as generador
state "Ensamblaje de programa objeto" as enlazador
[*] --> fuente
fuente --> lexico
lexico --> errores
errores --> lexico
lexico --> tabla
tabla --> lexico
lexico --> sintactico
sintactico --> errores
sintactico --> tabla
tabla --> sintactico
errores --> sintactico
sintactico --> semantico
semantico --> errores
semantico --> tabla
tabla --> semantico
errores --> semantico
semantico --> intermedio
intermedio --> errores
intermedio --> tabla
tabla --> intermedio
errores --> intermedio
intermedio --> optimizador
optimizador --> errores
optimizador --> tabla
tabla --> optimizador
errores --> optimizador
optimizador --> generador
generador --> enlazador
generador --> errores
generador --> tabla
tabla --> generador
errores --> generador
enlazador --> [*]
@enduml
Tipos de compiladores
Como parte de una clasificación básica podemos mencionar a los siguientes tipos de compiladores:
Compiladores Cruzados
También conocidos como crosscompilers su principal caracteística es que son compiladores multiplataforma.
Optimizadores
Son compiladores que generan código ejecutable de alto desempeño, a partir de el código generado por otro compilador o desde cero.
Compiladores de 1 pasada
Hacen un análisis del código antes de proceder a al generación del código ejecutable
Compiladores de varias pasadas
Realizan varios análisis del código antes de proceder a la generación del código ejecutable.
Compiladores JIT
Las siglas JIT significan Just-In-Time. Estos compiladores forman parte de in intérprete, y para aumentar su desempeño compilan código según se necesite en tiempo de ejecución.