Compilador
de las sentencias aceptadas en la fase de Análisis
Sintáctico).
• Síntesis: Su objetivo es la generación de la salida expresada en el lenguaje objeto y suele estar formado
por una o varias combinaciones de fases de Generación de Código (normalmente se trata de código
intermedio o de código objeto) y de Optimización
de Código (en las que se busca obtener un código lo
más eficienteposible).
Alternativamente, las fases descritas para las tareas de
análisis y síntesis se pueden agrupar en Front-end y Backend:
• 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 lasfases comprendidas entre el Análisis
Léxico y la Generación de Código Intermedio.
• Back-end: es la parte que genera el código máquina,
específico de una plataforma, a partir de los resultados de la fase de análisis, realizada por el Front End.
Diagrama a bloques de la operación de un buen compilador.
Un compilador es un programa informático que traduce
un programa escrito en un lenguaje deprogramación a
otro lenguaje de programación.[1] Usualmente el segundo lenguaje es lenguaje de máquina, pero también puede
ser un código intermedio (bytecode), o simplemente texto. Este proceso de traducción se conoce como compilación.[2]
1
Esta división permite que el mismo Back End se utilice para generar el código máquina de varios lenguajes de
programación distintos y que el mismo Front End quesirve para analizar el código fuente de un lenguaje de programación concreto sirva para generar código máquina en
varias plataformas distintas. Suele incluir la generación y
optimización del código dependiente de la máquina.
Partes de un compilador
El código que genera el Back End normalmente no se
puede ejecutar directamente, sino que necesita ser enlazado por un programa enlazador (linker)
Laconstrucción de un compilador involucra la división
del proceso en una serie de fases que variará con su complejidad. Generalmente estas fases se agrupan en dos tareas: el análisis del programa fuente y la síntesis del programa objeto.
2 Historia
En 1946 se desarrolló la primera computadora digital.
En un principio, estas máquinas ejecutaban instrucciones consistentes en códigos numéricos queseñalaban a
los circuitos de la máquina los estados correspondientes
a cada operación, lo que se denominó lenguaje máquina.
• 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 com- Pronto los primerosusuarios de estos ordenadores desponentes léxicos en frases gramaticales ) y Análisis cubrieron la ventaja de escribir sus programas mediante
semántico (comprobación de la validez semántica claves más fáciles de recordar que esos códigos; al final,
1
2
4 PROCESO DE COMPILACIÓN
todas esas claves juntas se traducían manualmente a lenguaje máquina. Estas claves constituyen los llamados lenguajesensambladores.
Pese a todo, el lenguaje ensamblador seguía siendo el de
una máquina, pero más fácil de manejar. Los trabajos
de investigación se orientaron hacia la creación de un
lenguaje que expresara las distintas acciones a realizar
de una manera lo más sencilla posible para una persona. El primer compilador fue escrito por Grace Hopper,
en 1952 para el lenguaje de programación A-0. En 1950
JohnBackus dirigió una investigación en IBM sobre un
lenguaje algebraico. En 1954 se empezó a desarrollar un
lenguaje que permitía escribir fórmulas matemáticas de
manera traducible por un ordenador; le llamaron FORTRAN (FORmulae TRANslator). Fue el primer lenguaje de alto nivel y se introdujo en 1957 para el uso de la
computadora IBM modelo 704.
• Compiladores de una sola pasada: generan el código...
Regístrate para leer el documento completo.