trabajo i - fundamentos de un compilador

Upload: yulipao2508

Post on 25-Feb-2018

226 views

Category:

Documents


0 download

TRANSCRIPT

  • 7/25/2019 Trabajo I - Fundamentos de Un Compilador

    1/12

    REPUBLICA BOLIVARIANA DE VENEZUELA.

    MINISTERIO DEL PODER POPULAR PARA LA EDUCACIN SUPERIOR.

    UNIVERSIDAD NACIONAL EXPERIMENTAL DE GUAYANA.

    VICERRECTORADO ACADMICO.

    COORDINACIN GENERAL DE PREGRADO.

    PROYECTO DE CARRERA: INGENIERA EN INFORMTICA.

    PROF: INTEGRANTES:

    Mrquez Flix. Carranza, Estefana.

    Marapacuto, Katerin.

    Moreno, Yuliannys.

    Valera, David.

    Puerto Ordaz, 16 de Noviembre de 2015.

  • 7/25/2019 Trabajo I - Fundamentos de Un Compilador

    2/12

    2

    INTRODUCCIN

    La manera de interpretar lo que a diario percibimos del mundo de la

    programacin que nos rodea depende en cierta manera de los lenguajes de

    programacin, debido a que el software ejecutado en todos los ordenadores se

    escribi en algn lenguaje de programacin. Estos lenguajes son notaciones que

    detallan los clculos a las personas y las mquinas. Sin embargo, para que un

    programa sea ejecutado en un computador, este debe traducirse a un formato en

    el que una computadora pueda ejecutarlo.

    Nuestro conocimiento sobre cmo organizar y escribir compiladores ha

    aumentado mucho desde que comenzaron a aparecer los primeros compiladores

    a principios de los aos cincuenta. Es difcil dar una fecha exacta de la aparicin

    del primer compilador, porque en un principio gran parte del trabajo de

    experimentacin y aplicacin se realiz de manera independiente por varios

    grupos. Gran parte de los primeros trabajos de compilacin estaba relacionada

    con la traduccin de frmulas aritmticas a cdigo de mquina. Sin embargo es

    importante conocer sus fundamentos de forma breve.

  • 7/25/2019 Trabajo I - Fundamentos de Un Compilador

    3/12

    3

    Fundamentos de un Compilador.

    Dicho en forma simple, un compilador es un programa que puede leer un

    programa en un lenguaje (conocido como fuente y es un lenguaje de alto nivel) y

    traducirlo en un programa equivalente en otro lenguaje (destino y es cdigo

    maquina o ensamblador). Siendo su primordial funcin reportar cualquier error

    detectado en el programa fuente durante el proceso de traduccin. Si el programa

    destino es un programa ejecutable en lenguaje mquina, entonces el usuario

    puede ejecutarlo para procesar las entradas y producir salidas (resultados). Fig. 1.

    Fig. 1. Entrada/Salida de un programa en un Compilador.

    Existe otro tipo de compilador conocido como intrprete, este es otro tipo

    comn de procesador de lenguaje. En vez de producir un programa destino como

    una traduccin, el intrprete nos da la apariencia de ejecutar directamente lasoperaciones especificadas en el programa de origen (fuente) con las entradas

    proporcionadas por el usuario, es decir, no se produce un resultado fsico sino

    lgico. Ver Fig. 2.

    Fig. 2. Entrada/Salida de un programa en un Intrprete.

    El programa destino en lenguaje mquina que produce un compilador es,

    por lo general, ms rpido que un intrprete al momento de asignar las entradas a

    las salidas. No obstante, por lo regular, el intrprete puede ofrecer mejores

  • 7/25/2019 Trabajo I - Fundamentos de Un Compilador

    4/12

    4

    diagnsticos de error que un compilador, ya que ejecuta el programa fuente

    instruccin por instruccin; al mismo tiempo posee la ventaja de ser portable.

    Adems de un compilador, pueden requerirse otros programas ms para la

    creacin de un programa destino ejecutable, como se muestra a continuacin:

    Fig. 3. Creacin de un programa ejecutable.

    Un programa fuente puede dividirse en mdulos guardados en archivos

    separados. La tarea de recolectar el programa de origen se confa algunas veces

    a un programa separado, llamado preprocesador. El preprocesador tambin

    puede expandir algunos fragmentos de cdigo abreviados de uso frecuente,

    llamados macros, en instrucciones del lenguaje fuente. Despus, el programa

    fuente al ser modificado alimenta a un compilador. El compilador puede producir

    un programa destino en ensamblador como su salida, ya que es ms fcil producir

    el lenguaje ensamblador como salida y es ms fcil su depuracin. A continuacin,el lenguaje ensamblador se procesa mediante un programa llamado ensamblador,

    el cual produce cdigo mquina relocalizable como su salida. A menudo, los

    programas extensos se compilan en partes, por lo que tal vez haya que enlazar

    (vincular) el cdigo mquina relocalizable con otros archivos objeto relocalizables

    y archivos de biblioteca para producir el cdigo que se ejecute en realidad en la

  • 7/25/2019 Trabajo I - Fundamentos de Un Compilador

    5/12

    5

    mquina. El enlazador resuelve las direcciones de memoria externas, en donde

    el cdigo en un archivo puede hacer referencia a una ubicacin en otro archivo.

    Entonces, el cargador rene todos los archivos objeto ejecutable en la memoria

    para su ejecucin.

    Un compilador se compone de las siguientes partes:

    Fig. 4. Composicin de un Compilador.

    Analizador Lxico o Morfolgico: es un anlisis lineal tambinconocido como preprocesador o scanner, en ingls. Realiza la primera

    fase de la compilacin. Convierte el programa que va a ser compilado

    en una serie de unidades ms complejas (unidades sintcticas o tokens)

    que desempean el papel de smbolos terminales para el analizador

    sintctico. En esta etapa la cadena de caracteres que constituye el

    programa fuente se lee de izquierda a derecha (de arriba hacia abajo) y

    se agrupa en componentes lxicos que son secuencias de caracteres

    que tienen un significado colectivo. Por ejemplo, en el anlisis lxico los

    caracteres de la proposicin de asignacin. Asimismo, elimina espacios

    en blanco y comentarios, y detecta errores morfolgicos. Usualmente se

    implementa mediante un autmata finito determinista.

  • 7/25/2019 Trabajo I - Fundamentos de Un Compilador

    6/12

    6

    Ejemplo:

    Tenemos la cadena: Posicin:= inicial + velocidad * 60

    De esta cadena los tokens resultantes seran los siguientes:

    1. El identificador posicin.

    2. El smbolo de asignacin: =.

    3. El identificador inicial.

    4. El signo de suma +.

    5. El identificador velocidad.

    6. El signo de multiplicacin *.

    7. El nmero 60.

    Analizador Sintctico: tambin llamado parser, en ingls. Realiza el

    resto de la reduccin al axioma de la gramtica para comprobar que la

    instruccin es correcta, es decir, permite la comprensin de la estructura

    en base a una gramtica dada. Y en caso de que el programa de

    entrada sea vlido, suministra el rbol sintctico que lo reconoce.

    Usualmente se implementa mediante un autmata a pila o unaconstruccin equivalente.

    En teora, se supone que la salida del analizador sintctico es alguna

    representacin del rbol sintctico que reconoce la secuencia de tokens

    suministrada por el analizador lxico. En la prctica, el analizador

    sintctico tambin hace:

    Acceder a la tabla de smbolos (para hacer parte del trabajo delanalizador semntico).

    Chequeo de tipos ( del analizador semntico).

    Generar cdigo intermedio.

  • 7/25/2019 Trabajo I - Fundamentos de Un Compilador

    7/12

    7

    Generar errores cuando se producen.En definitiva, realiza casi todas

    las operaciones de la compilacin. Este mtodo de trabajo da lugar a los

    mtodos de compilacin dirigidos por sintaxis.

    Ejemplo:

    Sea la gramtica anterior.

    E E + T | T

    T T * F | F

    F ( E ) | a | b

    Supongamos que hay que reconocer: ( a + b ) * a + b

    Si el rbol puede construirse, es que la sentencia es correcta:

    Fig. 5. Gramtica resultante.

  • 7/25/2019 Trabajo I - Fundamentos de Un Compilador

    8/12

    8

    Analizador Semntico: Comprueba la correccin semntica de la

    instruccin, puesto que luego de comprender la estructura se debe

    definir su significado y de esta manera capturar las inconsistencias, por

    ejemplo, la compatibilidad del tipo de las variables en una expresin.

    Tabla de Smbolos o Identificadores: Es la tabla donde se almacena

    toda la informacin o dicho de otra manera, es una estructura de datos

    que contiene un registro vlido por cada identificador, con los campos

    para los atributos del identificador. La estructura de datos permite

    encontrar rpidamente el registro de cada identificador y almacenar o

    consultar rpidamente datos de ese registro.

    Generador de Cdigo:Traduce el programa fuente al lenguaje objeto

    utilizando toda la informacin proporcionada por las restantes partes del

    compilador.

    Optimizador de cdigo: Mejora la eficiencia del programa objeto en

    ocupacin de memoria o en tiempo de ejecucin.

    Ejemplo:

    X=Y*0 X=0

    Gestin de Memoria: tanto en el procesador de lenguaje como en el

    programa objeto.

    Recuperacin de errores.

    En los compiladores de un solo paso o etapa, suele fundirse el analizador

    semntico con el generador de cdigo. Otros compiladores pueden ejecutarse en

    varios pasos. Por ejemplo, en el primero se puede generar un cdigo intermedio

    en el que ya se han realizado los anlisis morfolgico, sintctico y semntico. El

  • 7/25/2019 Trabajo I - Fundamentos de Un Compilador

    9/12

    9

    segundo paso es otro programa que parte de ese cdigo intermedio y, a partir de

    l, genera el cdigo objeto. Todava es posible que un compilador se ejecute en

    tres pasos, dedicndose el tercero a la optimizacin del cdigo generado por la

    segunda fase. En un intrprete no existen las fases de generacin y optimizacin

    de cdigo, que se sustituyen por una fase de ejecucin de cdigo.

    Clasificacin de los Compiladores.

    a) Compilador cruzado. Genera un cdigo ejecutable en un ordenador distinto de

    aquel en que se realiza la compilacin.

    b) Compilador de montaje y ejecucin. Se fragmenta el programa fuente enmdulos que se compilan por separado, y una vez compilados se unen mediante

    un enlazador para formar un mdulo ejecutable.

    c) Compilador en una pasada. Examina el cdigo fuente una sola vez, generando

    el cdigo objeto.

    d) Compilador de pasadas mltiples Requiere varias lecturas del programa fuente

    para producir y optimizar el cdigo objeto.

    e) Compilador de optimizacin. Lee el cdigo fuente, lo analiza, optimiza y

    descubre errores potenciales sin ejecutar el programa.

    f) Compilador incremental. Compila el programa fuente, en caso de detectar

    errores al volver a compilar el programa corregido, solo compila las modificaciones

    que se han hecho respecto al primero.

    g) Ensamblador. El lenguaje fuente es el lenguaje ensamblador.

    h) Autocompilador. Es el compilador que est escrito en el mismo lenguaje a

    compilar, bsicamente nos sirve para hacer ampliaciones al lenguaje, mejorar el

    cdigo generado, etc.

  • 7/25/2019 Trabajo I - Fundamentos de Un Compilador

    10/12

    10

    i) Metacompilador. Compilador de compiladores. Obtiene como entrada la

    definicin de un lenguaje y como salida el compilador para dicho lenguaje.

  • 7/25/2019 Trabajo I - Fundamentos de Un Compilador

    11/12

    11

    CONCLUSIN

    La fundamental importancia de cualquier lenguaje de programacin, es el

    ncleo o motor de que a simple vista no se ve, sin el cual sera incomprensible el

    lenguaje mquina. Por esta razn, los compiladores existen y nos brindan la

    posibilidad de establecer interaccin con los computadores a un nivel perceptible

    para los humanos, mientras que detrs de las interfaces que apreciadas trabaja de

    la mano con el computador.

    La escritura de compiladores comprende lenguajes de programacin, laarquitectura de computadores, la teora de lenguajes, los algoritmos y la ingeniera

    del software que, por fortuna con algunas tcnicas bsicas de escritura de

    compiladores permite la construccin de traductores para una gran variedad de

    lenguajes y maquinas.

  • 7/25/2019 Trabajo I - Fundamentos de Un Compilador

    12/12

    12

    BIBLIOGRAFA

    Compiladores principios, tcnicas y herramientas. Segunda edicin Alfred V. Aho

    Columbia University Monica S. Lam Stanford University Ravi Sethi Avaya Jeffrey

    D. Ullman Stanford University. Editorial PEARSON Educacin.

    Compiladores e intrpretes: teora y prctica. Manuel Alfonseca, Moreno Marina

    de la Cruz, Echeanda Alfonso Ortega de la Puente, Estrella Pulido Caabate.

    Editorial PEARSON Preantice Hall.