Professional Documents
Culture Documents
Compilador
Definición:
Análisis: Se trata de la comprobación de la corrección del programa fuente, e incluye las fases
correspondientes al Análisis Léxico (que consiste en la descomposición del programa fuente en
componentes léxicos), Análisis Sintáctico (agrupación de los componentes léxicos en frases
gramaticales ) y Análisis Semántico (comprobación de la validez semántica de las sentencias
aceptadas en la fase de Análisis Sintáctico).
Front-end: es la 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. Esta parte suele ser independiente de la
plataforma o sistema para el cual se vaya a compilar, y está compuesta por las fases comprendidas
entre el Análisis Léxico y la Generación de Código Intermedio.
Tipos de compiladores
Compiladores cruzados: generan código para un sistema distinto del que están funcionando.
Compiladores de una sola pasada: generan el código máquina a partir de una única lectura del
código fuente.
Compiladores de varias pasadas: necesitan leer el código fuente varias veces antes de poder
producir el código máquina.
Compiladores JIT (Just In Time): forman parte de un intérprete y compilan partes del código según
se necesitan.
El Interprete
Definición:
En ciencias de la computación, intérprete o interpretador es un programa informático capaz de
analizar y ejecutar otros programas, escritos en un lenguaje de alto nivel. Los intérpretes se
diferencian de los compiladores en que mientras estos traducen un programa desde su
descripción en un lenguaje de programación al código de máquina del sistema, los intérpretes sólo
realizan la traducción a medida que sea necesaria, típicamente, instrucción por instrucción, y
normalmente no guardan el resultado de dicha traducción.
Usando un intérprete, un solo archivo fuente puede producir resultados iguales incluso en
sistemas sumamente diferentes (ej. una PC y un PlayStation 3). Usando un compilador, un solo
archivo fuente puede producir resultados iguales solo si es compilado a distintos ejecutables
específicos a cada sistema.
Los programas interpretados suelen ser más lentos que los compilados debido a la necesidad de
traducir el programa mientras se ejecuta, pero a cambio son más flexibles como entornos
de programación y de puración (lo que se traduce, por ejemplo, en una mayor facilidad para
reemplazar partes enteras del programa o añadir módulos completamente nuevos), y permiten
ofrecer al programa interpretado un entorno no dependiente de la máquina donde se ejecuta el
intérprete, sino del propio intérprete (lo que se conoce comúnmente como máquina virtual).
Para desdibujar más la distinción entre los interpretadores, los interpretadores de bytecode y la
compilación, está la compilación justo a tiempo (o JIT), una técnica en la cual la representación
intermedia es compilada a código de máquina nativo en tiempo de ejecución. Esto confiere la
eficiencia de ejecutar el código nativo, al costo de tiempo de inicio y de un uso creciente de la
memoria cuando el bytecode o el AST es compilado por primera vez. La optimización adaptativa es
una técnica complementaria en la cual el interpretador hace un análisis de desempeño del
programa que está corriendo (profiling) y compila sus partes más frecuentemente ejecutadas a
código nativo. Ambas técnicas tienen algunas décadas, apareciendo en lenguajes tales
como Smalltalk en los años 1980.