Compiladores e Interpretes

COMPILADORES E INTERPRETES ISC. ROSA IMELDA GARCIA CHI, MTI LENGUAJES Y AUTOMATAS COMPILADOR Los compiladores son p

Views 121 Downloads 0 File size 228KB

Report DMCA / Copyright

DOWNLOAD FILE

Recommend stories

Citation preview

COMPILADORES E INTERPRETES

ISC. ROSA IMELDA GARCIA CHI, MTI

LENGUAJES Y AUTOMATAS

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 código objeto (también llamado en ocasiones código de máquina) para la máquina objetivo, es decir, código escrito en las instrucciones de máquina correspondientes a la computadora en la cual se ejecutará.

ISC. ROSA IMELDA GARCIA CHI, MTI

PODEMOS VISUALIZAR ESTE PROCESO DE MANERA ESQUEMÁTICA 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 número de líneas de código que puede variar de 10,000 a 1,000,000. Escribir un programa de esta naturaleza, o incluso comprenderlo, no es una tarea fácil, y la mayoría de los científicos y profesionales de la computación nunca escribirán un compilador completo ISC. ROSA IMELDA GARCIA CHI, MTI

EL COMPILADOR Y EL INTÉRPRETE No obstante, los compiladores se utilizan en casi todas las formas de la computación, y cualquiera que esté involucrado profesionalmente con las computadoras debería conocer la organización y el funcionamiento básicos de un compilador. Además, una tarea frecuente en las aplicaciones de las computadoras es el desarrollo de programas de interfaces e intérpretes de comandos, que son más pequeños que los compiladores pero utilizan las mismas técnicas. Por lo tanto, el conocimiento de estas técnicas tiene una aplicación práctica importante. ISC. ROSA IMELDA GARCIA CHI, MTI

TEORÍA DE LENGUAJES Y AUTÓMATAS Para conseguir esto es necesario estudiar las técnicas teóricas,

principalmente las provenientes de la teoría de los lenguajes y autómatas,

que hacen de la construcción 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 década de 1940, se hizo necesario escribir secuencias de código o programas, que darían como resultado que estas computadoras realizaran los cálculos deseados. Al principio estos programas se escribían en lenguaje de máquina: códigos numéricos que representaban las operaciones reales de la máquina que iban a efectuarse

Por ejemplo: C7 06 0000 0002 representa la instrucción para mover el número 2 a la ubicación 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 códigos es muy tediosa y consume mucho tiempo.

Esta forma de codificación fue remplazada por el LENGUAJES ENSAMBLADOR En el LENGUAJE ENSAMBLADOR, las instrucciones y las localidades de memoria son simbólicamente dadas. Por ejemplo, una instrucción 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 códigos simbólicos y las localidades de memoria del lenguaje ensamblador a los códigos numéricos correspondientes del lenguaje de máquina. El lenguaje ensamblador mejoró enormemente la velocidad y exactitud con la que podían escribirse los programas, y en la actualidad todavía se encuentra en uso, en especial cuando se necesita una gran velocidad o brevedad en el código.

Sin embargo, el Lenguaje ensamblador tiene varios defectos: aún no es fácil de escribir y es difícil de leer y comprender.

ISC. ROSA IMELDA GARCIA CHI, MTI

LENGUAJE ENSAMBLADOR Además, el lenguaje ensamblador depende en extremo de la máquina en particular para la cual se haya escrito, de manera que el código escrito para una computadora debe volver a escribirse por completo para otra máquina. Como es evidente, el siguiente paso fundamental en la tecnología de programación fue escribir las operaciones de un programa de una manera concisa que se pareciera mucho a la notación matemática o lenguaje natural de manera que fueran independientes de cualquier máquina en particular y todavía se pudieran traducir mediante un programa para convertirlas en código ejecutable.

Por ejemplo, el anterior código del Lenguaje ensamblador se puede escribir de manera concisa e independiente de una máquina en particular como:

X=2 ISC. ROSA IMELDA GARCIA CHI, MTI

PRIMER COMPILADOR

Al principio se temía que esto no fuera posible, o que si lo fuera, el código objeto sería tan poco eficiente que resultaría inútil.

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ó sólo a un gran esfuerzo, ya que la mayoría de los procesos involucrados en la traducción de lenguajes de programación no fueron bien comprendidos en el momento.

ISC. ROSA IMELDA GARCIA CHI, MTI

LENGUAJE NATURAL Más 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 construcción de compiladores se volviera mucho más fácil e incluso pudiera ser automatizado hasta cierto punto.

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

LA JERARQUÍA DE CHOMSKY La jerarquía de Chomsky como ahora se le conoce, se compone de cuatro niveles de gramáticas, denominadas gramáticas •tipo O, •tipo 1, •tipo 2 y •tipo 3, cada una de las cuales es una especialización de su predecesora.

ISC. ROSA IMELDA GARCIA CHI, MTI

… LA JERARQUÍA DE CHOMSKY

Las gramáticas de tipo 2, o gramáticas libres de contexto, demostraron ser las más útiles para lenguajes de programación, en la actualidad son la manera estándar para representar la estructura de los lenguajes de programación.

El estudio del problema del análisis sintáctico (la determinación de algoritmos eficientes para el reconocimiento de lenguajes libres de contexto) se llevó a cabo en las décadas de los 60 y 70 y condujo a una solución muy completa de este problema, que en la actualidad se ha vuelto una parte estándar de la teoría de compiladores. ISC. ROSA IMELDA GARCIA CHI, MTI

TÉCNICAS DE OPTIMIZACIÓN

Mucho más complejo ha sido el desarrollo de métodos para la generación de código objeto eficaz, que comenzó con los primeros compiladores y continúa hasta nuestros días.

Estas técnicas suelen denominarse, incorrectamente, técnicas de optimización, pero en realidad deberían llamarse técnicas de mejoramiento de código, puesto que casi nunca producen un código objeto verdaderamente óptimo y sólo mejoran su eficacia. ISC. ROSA IMELDA GARCIA CHI, MTI

GENERACIÓN DE CÓDIGO A fines de los años 70 y principios de los 80 diversos proyectos se enfocaron en automatizar la generación de otras partes de un compilador, incluyendo la generación del código.

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

ISC. ROSA IMELDA GARCIA CHI, MTI

PROGRAMAS RELACIONADOS CON LOS COMPILADORES

ISC. ROSA IMELDA GARCIA CHI, MTI

Unidad 1 . Introducci ón a Lenguajes Formales

PROGRAMAS RELACIONADOS CON LOS COMPILADORES INTÉRPRETES

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 TRADUCCIÓN

De un COMPILADOR

CODIGO FUENTE ANALIZADOR LEXICO O RASTREADOR TOKENS ANALIZADOR SINTÁCTICO

ARBOL SINTÁCTICO ANALIZADOR SEMÁNTICO ARBOL CON ANOTACIONES

OPTIMIZADOR DE CÓDIGO FUENTE CÓDIGO INTERMEDIO GENERADOR DE CÓDIGO CÓDIGO OBJETO OPTIMIZADOR DE CÓDIGO OBJETO CÓDIGO OBJETO ISC. ROSA IMELDA GARCIA CHI, MTI

TABLA DE LITERALESS TABLA DE SÍMBOLOS MANEJADOR DE ERRORES

ISC. ROSA IMELDA GARCIA CHI, MTI

COMPILACIÓN Un compilador es un programa informático que traduce un programa escrito en un lenguaje de programación a otro lenguaje de programación, generando un programa equivalente que la máquina será capaz de interpretar. 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.

ISC. ROSA IMELDA GARCIA CHI, MTI

COMPILADOR Un compilador es un programa que permite traducir el código fuente de un programa en lenguaje de alto nivel, a otro lenguaje de nivel inferior (típicamente lenguaje de máquina). De esta manera un programador puede diseñar un programa en un lenguaje mucho más cercano a como piensa un ser humano, para luego compilarlo a un programa más 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 construcció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.

ISC. ROSA IMELDA GARCIA CHI, MTI

FASES DEL COMPILADOR

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).

ISC. ROSA IMELDA GARCIA CHI, MTI

FASES DEL COMPILADOR

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 eficiente posible).

ISC. ROSA IMELDA GARCIA CHI, MTI

ALTERNATIVAMENTE, LAS FASES DESCRITAS PARA LAS TAREAS DE ANÁLISIS Y SÍNTESIS SE PUEDEN AGRUPAR EN FRONT-END Y BACK -END:

Front-end:

Back-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.

• 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.

ISC. ROSA IMELDA GARCIA CHI, MTI

TIPOS DE COMPILADORES

ISC. ROSA IMELDA GARCIA CHI, MTI

Unidad 1 . Introducci ón a Lenguajes Formales

E STA TA XONOMÍA 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 ORÍAS :

Compiladores cruzados: Compiladores optimizadores:

• generan código para un sistema distinto del que están funcionando.

• realizan cambios en el código para mejorar su eficiencia, pero manteniendo la funcionalidad del programa original.

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.

ISC. ROSA IMELDA GARCIA CHI, MTI