martes, 17 de febrero de 2009

¿ Qué es un compilador?

Los Compiladores son programas o herramientas encargadas de compilar. Un compilador toma un texto (codigo fuente) escrito en un lenguaje de alto nivel y lo traduce a un lenguaje comprensible por las computadoras (codigo objeto). Básicamente, existen dos grandes formas de ejecutar programas: programas compilados (previamente pasados por un compilador) y programas interpretados (necesitan pasar por un intérprete para ejecutarse en tiempo real).


Características de un compilador:

Generalmente un compilador se divide en dos partes:

* Front End: parte que analiza el código fuente, comprueba su validez, genera el árbol de derivación y rellena los valores de la tabla de símbolos. Parte que suele ser independiente de la plataforma o sistema operativo para el que funcionará.

* Back End: parte en donde se genera el código máquina exclusivo para una plataforma a partir de lo analizado en el front end.Por lo general el resultado del back end no puede ser ejecutado directamente, se necesita pasar por un proceso de enlazado (linker).

Existen varios tipos de compiladores:

Compiladores cruzados, Compiladores optimizadores, Compiladores de una sola pasada, Compiladores de varias pasadas, Compiladores JIT (Just In Time).

Intérpretes vs compiladores:

Cualquier lenguaje puede ser ejecutado tanto vía intérprete o vía compilador, pero algunos lenguajes suelen asociarse más a una vía que a la otra, y por esto son llamados "lenguajes interpretados" o "lenguajes compilados" respectivamente.También puede darse que un programa contenga partes que son implementadas vía intérprete y otras vía compilador.También existen intérpretes que incluyen cierta "compilación" en el medio. Son aquellos que compilan a un código intermedio llamado bytecode, que es más eficiente de ejecutar que hacerlo directamente desde el código fuente.En general, la principal desventaja de los intérpretes, es que cuando un programa es interpretado, suele ejecutarse más lento que si el mismo programa estuviese compilado. Esto se debe a que el intérprete debe analizar cada sentencia en el programa en cada ejecución (un análisis en tiempo real). También el acceso a variables es más lento en un intérprete, porque mapear los identificadores para almacenar las localizaciones debe hacerse repetidas veces en tiempo real.


Las fases de un compilador son:

Análisis Léxico: Esta fase se encarga de verificar si todas las cadenas pertenecen o no al lenguaje. Es decir realiza un análisis símbolo por símbolo indicando el token por cada uno de los elementos reconocidos o el error en caso de no reconocer. Este análisis no logra detectar muchos errores por su característica.

Análisis Sintáctico: En esta fase se analiza la estructura de las expresiones en base a gramáticas. Aqui ya se puede determinar si una extructura por ejemplo una expresión matemática esta mal formada. El análisis que se realiza es jerarquico es decir en base a àrboles de derivación que se obtienen de las mismas gramáticas.

Análisis Semántico: Este análisis es más dificil de formalizar, determina el tipo de los resultados intermedios, comprobar que los argumentos que tienen un operador pertenecen al conjunto de operadores posible, y si son compatibles entre sì.

Generación de Código Intemedio: El código intermedio es una representación en base a elementos de 3 y 4 direcciones. Lo que nos permite llegar a la fase de optimizaciòn de código.
Optimización de Código: Consiste en realizar uuna mejora en el código intermedio, para reducir el número de líneas y hacer que la ejecución sea más rápida.

Generación de Codigo: Llegamos a la generación de código ensamblador o código máquina del procesador que nos interese.

No hay comentarios:

Publicar un comentario