Sie sind auf Seite 1von 32

COMPILADORES E INTERPRETES

LENGUAJES Y AUTOMATAS

ISC. ROSA IMELDA GARCIA CHI, MTI

COMPILADOR

Los compiladores son programas de computadora que traducen un lenguaje a otro.

Un compilador toma como su entrada un programa escrito en su lenguaje fuente y produce un programa equivalente escrito en su lenguaje objetivo.
ISC. ROSA IMELDA GARCIA CHI, MTI

COMPILADOR

Por lo regular, el lenguaje fuente es un lenguaje de alto nivel, tal como C o C++, mientras que el lenguaje objetivo es cdigo objeto (tambin llamado en ocasiones cdigo de mquina) para la mquina objetivo, es decir, cdigo escrito en las instrucciones de mquina correspondientes a la computadora en la cual se ejecutar.

ISC. ROSA IMELDA GARCIA CHI, MTI

PODEMOS VISUALIZAR ESTE PROCESO DE MANERA ESQUEMTICA COMO SIGUE:

PROGRAMA FUENTE

COMPILADOR

PROGRAMA OBJETO

ENLAZADOR O LINKEADOR

PROGRAMA EXECUTABLE

ISC. ROSA IMELDA GARCIA CHI, MTI

UN COMPILADOR

Un compilador es un programa muy complejo con un nmero de lneas de cdigo que puede variar de 10,000 a 1,000,000. Escribir un programa de esta naturaleza, o incluso comprenderlo, no es una tarea fcil, y la mayora de los cientficos y profesionales de la computacin nunca escribirn un compilador completo
ISC. ROSA IMELDA GARCIA CHI, MTI

EL COMPILADOR Y EL INTRPRETE
No obstante, los compiladores se utilizan en casi todas las formas de la computacin, y cualquiera que est involucrado profesionalmente con las computadoras debera conocer la organizacin y el funcionamiento bsicos de un compilador. Adems, una tarea frecuente en las aplicaciones de las computadoras es el desarrollo de programas de interfaces e intrpretes de comandos, que son ms pequeos que los compiladores pero utilizan las mismas tcnicas. Por lo tanto, el conocimiento de estas tcnicas tiene una aplicacin prctica importante.
ISC. ROSA IMELDA GARCIA CHI, MTI

TEORA DE LENGUAJES Y AUTMATAS


Para conseguir esto es necesario estudiar las tcnicas tericas,

principalmente las provenientes de la teora de los lenguajes y autmatas,

que hacen de la construccin de compiladores una tarea manejable.

ISC. ROSA IMELDA GARCIA CHI, MTI

POR QUE COMPILADORES? UNA BREVE HISTORIA


Con el advenimiento de la computadora con programa almacenado, iniciado por John Von Neuman a finales de la dcada de 1940, se hizo necesario escribir secuencias de cdigo o programas, que daran como resultado que estas computadoras realizaran los clculos deseados. Al principio estos programas se escriban en lenguaje de mquina: cdigos numricos que representaban las operaciones reales de la mquina que iban a efectuarse

Por ejemplo: C7 06 0000 0002


representa la instruccin para mover el nmero 2 a la ubicacin 0000 (en sistema hexadecimal en los procesadores Intel 8x86 que se utilizaban en las PC de IBM.

ISC. ROSA IMELDA GARCIA CHI, MTI

EL LENGUAJE ENSAMBLADOR
Por supuesto la escritura de tales cdigos es muy tediosa y consume mucho tiempo.

Esta forma de codificacin fue remplazada por el LENGUAJES ENSAMBLADOR


En el LENGUAJE ENSAMBLADOR, las instrucciones y las localidades de memoria son simblicamente dadas. Por ejemplo, una instruccin en lenguaje ensamblador equivalente a la del ejemplo anterior es:

MOV X,2
ISC. ROSA IMELDA GARCIA CHI, MTI

UN ENSAMBLADOR
Un ensamblador traduce los cdigos simblicos y las localidades de memoria del lenguaje ensamblador a los cdigos numricos correspondientes del lenguaje de mquina. El lenguaje ensamblador mejor enormemente la velocidad y exactitud con la que podan escribirse los programas, y en la actualidad todava se encuentra en uso, en especial cuando se necesita una gran velocidad o brevedad en el cdigo.

Sin embargo, el Lenguaje ensamblador tiene varios defectos: an no es fcil de escribir y es difcil de leer y comprender.

ISC. ROSA IMELDA GARCIA CHI, MTI

LENGUAJE ENSAMBLADOR
Adems, el lenguaje ensamblador depende en extremo de la mquina en particular para la cual se haya escrito, de manera que el cdigo escrito para una computadora debe volver a escribirse por completo para otra mquina. Como es evidente, el siguiente paso fundamental en la tecnologa de programacin fue escribir las operaciones de un programa de una manera concisa que se pareciera mucho a la notacin matemtica o lenguaje natural de manera que fueran independientes de cualquier mquina en particular y todava se pudieran traducir mediante un programa para convertirlas en cdigo ejecutable.

Por ejemplo, el anterior cdigo del Lenguaje ensamblador se puede escribir de manera concisa e independiente de una mquina en particular como:

X=2
ISC. ROSA IMELDA GARCIA CHI, MTI

PRIMER COMPILADOR

Al principio se tema que esto no fuera posible, o que si lo fuera, el cdigo objeto sera tan poco eficiente que resultara intil.

El desarrollo del lenguaje FORTRAN y su compilador, llevado a cabo por un equipo en IBM dirigido por John Backus entre 1954 y 1957 demostr que estos temores eran infundados.
No obstante, el xito de este proyecto se debi slo a un gran esfuerzo, ya que la mayora de los procesos involucrados en la traduccin de lenguajes de programacin no fueron bien comprendidos en el momento.

ISC. ROSA IMELDA GARCIA CHI, MTI

LENGUAJE NATURAL
Ms o menos al mismo tiempo en que el primer compilador se estaba desarrollando, Noam Chomsky comenz a estudiar la estructura del lenguaje natural. Sus hallazgos finalmente hicieron que la construccin de compiladores se volviera mucho ms fcil e incluso pudiera ser automatizado hasta cierto punto.

Los estudios de Chomsky condujeron a la clasificacin de los lenguajes de acuerdo con la complejidad de sus gramticas (las reglas que especifican su estructura) y la potencia de los algoritmos necesarios para reconocerlas.
ISC. ROSA IMELDA GARCIA CHI, MTI

LA JERARQUA DE CHOMSKY
La jerarqua de Chomsky como ahora se le conoce, se compone de cuatro niveles de gramticas, denominadas gramticas tipo O, tipo 1, tipo 2 y tipo 3, cada una de las cuales es una especializacin de su predecesora.

ISC. ROSA IMELDA GARCIA CHI, MTI

LA JERARQUA DE CHOMSKY

Las gramticas de tipo 2, o gramticas libres de contexto, demostraron ser las ms tiles para lenguajes de programacin, en la actualidad son la manera estndar para representar la estructura de los lenguajes de programacin.

El estudio del problema del anlisis sintctico (la determinacin de algoritmos eficientes para el reconocimiento de lenguajes libres de contexto) se llev a cabo en las dcadas de los 60 y 70 y condujo a una solucin muy completa de este problema, que en la actualidad se ha vuelto una parte estndar de la teora de compiladores.
ISC. ROSA IMELDA GARCIA CHI, MTI

TCNICAS DE OPTIMIZACIN

Mucho ms complejo ha sido el desarrollo de mtodos para la generacin de cdigo objeto eficaz, que comenz con los primeros compiladores y contina hasta nuestros das.

Estas tcnicas suelen denominarse, incorrectamente, tcnicas de optimizacin, pero en realidad deberan llamarse tcnicas de mejoramiento de cdigo, puesto que casi nunca producen un cdigo objeto verdaderamente ptimo y slo mejoran su eficacia.
ISC. ROSA IMELDA GARCIA CHI, MTI

GENERACIN DE CDIGO
A fines de los aos 70 y principios de los 80 diversos proyectos se enfocaron en automatizar la generacin de otras partes de un compilador, incluyendo la generacin del cdigo.

Estos intentos han tenido menos xito, posiblemente debido a la naturaleza compleja de las operaciones y a nuestra poca comprensin de las mismas.

ISC. ROSA IMELDA GARCIA CHI, MTI

PROGRAMAS RELACIONADOS CON LOS COMPILADORES

Unidad 1 . Introducci n a Lenguajes Formales

ISC. ROSA IMELDA GARCIA CHI, MTI

PROGRAMAS RELACIONADOS CON LOS COMPILADORES


INTRPRETES
ENSAMBLADORES

LIGADORES

EDITORES

PREPROCESADORES

CARGADORES

DEPURADORES

PERFILADORES

ADMINISTRADORES DE PROYECTO

ISC. ROSA IMELDA GARCIA CHI, MTI

TAREA 3.

Elabora un mapa conceptual en base a cada uno de los programas relacionados con los compiladores.

ISC. ROSA IMELDA GARCIA CHI, MTI

PROCESO DE TRADUCCIN

De un COMPILADOR

CODIGO FUENTE ANALIZADOR LEXICO O RASTREADOR TOKENS ANALIZADOR SINTCTICO

ARBOL SINTCTICO
ANALIZADOR SEMNTICO ARBOL CON ANOTACIONES

TABLA DE LITERALESS TABLA DE SMBOLOS MANEJADOR DE ERRORES

OPTIMIZADOR DE CDIGO FUENTE CDIGO INTERMEDIO GENERADOR DE CDIGO CDIGO OBJETO OPTIMIZADOR DE CDIGO OBJETO
CDIGO OBJETO
ISC. ROSA IMELDA GARCIA CHI, MTI

ISC. ROSA IMELDA GARCIA CHI, MTI

COMPILACIN
Un compilador es un programa informtico que traduce un programa escrito en un lenguaje de programacin a otro lenguaje de programacin, generando un programa equivalente que la mquina ser capaz de interpretar. Usualmente el segundo lenguaje es lenguaje de mquina, pero tambin puede ser un cdigo intermedio (bytecode), o simplemente texto.

Este proceso de traduccin se conoce como compilacin.

ISC. ROSA IMELDA GARCIA CHI, MTI

COMPILADOR
Un compilador es un programa que permite traducir el cdigo fuente de un programa en lenguaje de alto nivel, a otro lenguaje de nivel inferior (tpicamente lenguaje de mquina). De esta manera un programador puede disear un programa en un lenguaje mucho ms cercano a como piensa un ser humano, para luego compilarlo a un programa ms manejable por una computadora.

ISC. ROSA IMELDA GARCIA CHI, MTI

PARTES DE UN COMPILADOR

Unidad 1 . Introducci n a Lenguajes Formales

FASES DE UN COMPILADOR
La construccin de un compilador involucra la divisin del proceso en una serie de fases que variar con su complejidad. Generalmente estas fases se agrupan en dos tareas:

el anlisis del programa fuente y la sntesis del programa objeto.

ISC. ROSA IMELDA GARCIA CHI, MTI

FASES DEL COMPILADOR

Anlisis:

Se trata de la comprobacin de la correccin del programa fuente, e incluye las fases correspondientes al Anlisis Lxico (que consiste en la descomposicin del programa fuente en componentes lxicos), Anlisis Sintctico (agrupacin de los componentes lxicos en frases gramaticales ) y Anlisis Semntico (comprobacin de la validez semntica de las sentencias aceptadas en la fase de Anlisis Sintctico).

ISC. ROSA IMELDA GARCIA CHI, MTI

FASES DEL COMPILADOR

Sntesis:

Su objetivo es la generacin de la salida expresada en el lenguaje objeto y suele estar formado por una o varias combinaciones de fases de Generacin de Cdigo (normalmente se trata de cdigo intermedio o de cdigo objeto) y de Optimizacin de Cdigo (en las que se busca obtener un cdigo lo ms eficiente posible).

ISC. ROSA IMELDA GARCIA CHI, MTI

ALTERNATIVAMENTE, LAS FASES DESCRITAS PARA LAS TAREAS DE ANLISIS Y SNTESIS SE PUEDEN AGRUPAR EN FRONT-END Y BACK -END:
Es la parte que analiza el cdigo fuente, comprueba su validez, genera el rbol de derivacin y rellena los valores de la tabla de smbolos. 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 Anlisis Lxico y la Generacin de Cdigo Intermedio.

Front-end:

Back-end:

Es la parte que genera el cdigo mquina, especfico de una plataforma, a partir de los resultados de la fase de anlisis, realizada por el Front End.

ISC. ROSA IMELDA GARCIA CHI, MTI

TIPOS DE COMPILADORES

Unidad 1 . Introducci n a Lenguajes Formales

ISC. ROSA IMELDA GARCIA CHI, MTI

E STA TA XONOMA DE LOS T I P OS DE C OM P I LA DORES N O E S E XC LUY E NTE, P OR LO QUE P UE DE H A BE R C OM P I LADORES QUE SE A DSC RI BAN A VA RI AS CAT EG ORAS :

Compiladores cruzados: Compiladores optimizadores:

generan cdigo para un sistema distinto del que estn funcionando.

realizan cambios en el cdigo para mejorar su eficiencia, pero manteniendo la funcionalidad del programa original.

Compiladores de una sola pasada:


Compiladores de varias pasadas: Compiladores JIT (Just In Time):

generan el cdigo mquina a partir de una nica lectura del cdigo fuente.

necesitan leer el cdigo fuente varias veces antes de poder producir el cdigo mquina.

forman parte de un intrprete y compilan partes del cdigo segn se necesitan.

ISC. ROSA IMELDA GARCIA CHI, MTI

Das könnte Ihnen auch gefallen