Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Bootstrapping

2,351 views

Published on

Bootstraping. Compilador Fortran H. Compilador de Pascal. Autocompilador.
Estructura general de un traductor
Fases de un compilador.

  • Be the first to comment

Bootstrapping

  1. 1. PUCESI ESCUELA DE INGENIERIA EN SISTEMASCOMPILADORES 5º NIVEL INGENIERIA PUCESI
  2. 2. BOOTSTRAPPING El bootstrapping (literalmente "truco o trampa de arranque"1) sebasa en utilizar las facilidades que ofrece un lenguaje paracompilarse a sí mismo. El bootstrapping puede plantear lacuestión: ¿Qué fue primero, el huevo o la gallina?Una forma de bootstrapping es construir el compilador de unlenguaje a partir de un subconjunto de dicho lenguaje. Supóngaseque un nuevo lenguaje L se va a implementar en una máquina M.Como primer paso se puede escribir un pequeño compilador quetraduce un subconjunto S de L a un lenguaje objeto que es elcódigo de la máquina M; es decir un compilador SMM. Entonces sepuede usar el subconjunto S para escribir un compilador LSM paraL. Cuando LSM se ejecuta a través de SMM, se obtiene unaimplementación de L, que es LMM. El lenguaje Neliac (un derivadodel Algol) fue uno de los primeros lenguajes que se implementó apartir de su propio lenguaje. COMPILADORES 5º NIVEL INGENIERIA PUCESI
  3. 3. BOOTSTRAPPING El lenguaje Pascal fue implementado por primera vez por NiklausWirth (1971) por medio de un compilador escrito en unsubconjunto del Pascal (más del 60%). También escribió uncompilador de este subconjunto en un lenguaje de bajo nivel, y pormedio de varios booststrapping logró construir un compiladorpara el Pascal completo. Los métodos utilizados para realizar elbooststrapping de los compiladores de Pascal se describen porLecarme y Peyrolle-Thomas.Las mayores ventajas del bootstrapping se producen cuando uncompilador se escribe en el lenguaje que se compila. Supóngaseque escribimos un un compilador LLN, para un lenguaje L, escritoen L para una máquina N. Pero las tareas de desarrollo se llevan acabo en otra máquina M, donde existe un compilador LMM. En unprimer paso se obtiene un compilador cruzado LMN, que seejecuta sobre M y produce el código para N: COMPILADORES 5º NIVEL INGENIERIA PUCESI
  4. 4. BOOTSTRAPPING El compilador LLN puede compilarse por segunda vez, pero ahorausando el generado por el compilador cruzado: COMPILADORES 5º NIVEL INGENIERIA PUCESI
  5. 5. BOOTSTRAPPING El resultado de la segunda compilación es uncompilador LNN que se ejecuta en una máquina N, yproduce un código para N. Sin embargo el compiladorestá construido en una máquina M (véase ejemplo 4.1).El proceso se muestra en la siguiente figura: COMPILADORES 5º NIVEL INGENIERIA PUCESI
  6. 6. BOOTSTRAPPING Utilizando las técnicas del bootstrapping, un compilador puedeoptimizarse a sí mismo. Supongamos todo el desarrollo en unamáquina dada M. Tenemos SSM, un buen compilador optimizadopara el lenguaje S escrito en S, y queremos SMM, un buencompilador optimizado escrito en M.Se puede construir SM*M*, un compilador poco optimizado de Sen M, que no sólo genera mal código, sino que además es lento.(M* indica una mala implementación en M. SM*M* es unaimplementación peor del compilador que genera peor código). Sinembargo, se puede usar este compilador no optimizado, paraobtener un buen compilador de S en dos pasos: COMPILADORES 5º NIVEL INGENIERIA PUCESI
  7. 7. BOOTSTRAPPING  Ejemplo 5.1: Compilador de FORTRAN HLa técnica de bootstrapping se ha utilizado para eldesarrollo del compilador FORTRAN H. El compiladorse escribió en FORTRAN. El primer paso fue convertirla ejecución sobre un IBM 7094 a un System/360, unatarea dura. El segundo paso fue optimizarse, pasar deun tamaño de alrededor de 550K a unos 400K bytes. COMPILADORES 5º NIVEL INGENIERIA PUCESI
  8. 8. BOOTSTRAPPING Ejemplo 5.2: Compilador de PascalAmmann describe como se desarrolló el compilador dePascal, dividiendo la tarea en varias fases:a) Se eligió un subconjunto básico de Pascal, y se programóen SCALLOP (lenguaje de nivel medio de los ordenadoresCDC). Este primer conjunto se denominó Pascal sin revisarPSR. Por medio de un bootstrapping se consiguió uncompilador PSR60006000*, denotando por 6000, el código delas serie CDC 6000, y por 6000* el código no óptimo. COMPILADORES 5º NIVEL INGENIERIA PUCESI
  9. 9. BOOTSTRAPPING b) Se programó un nuevo compilador de Pascalrevisado P, utilizando el Pascal sin revisar, PPSR6000.c) Se compila el compilador obtenido en b) con elobtenido en a), y se obtiene P6000*6000d) Se vuelve a programar un compilador de Pascalrevisado, pero esta vez en Pascal revisado, PP6000. COMPILADORES 5º NIVEL INGENIERIA PUCESI
  10. 10. BOOTSTRAPPING e) Se compila el compilador d) con el obtenido en c) y seobtiene por fin P60006000. COMPILADORES 5º NIVEL INGENIERIA PUCESI
  11. 11. AUTOCOMPILADOR Un autocompilador de un lenguaje es un compilador que puedecompilarse a sí mismo. Es decir el lenguaje fuente y el lenguajede implementación es el mismo, y el compilador es capazade compilar el programa fuente del propio compilador. Nodebe confundirse autocompilación con bootstrapping, laautocompilación puede ser el resultado final de unbootstrapping, pero también puede llegarse a ella utilizandootro compilador del mismo lenguaje.Hendrix relata como construir un autocompilador de Small C(un subconjunto del lenguaje C). El libro incluye un disquetecon todos los fuentes y un compilador de Small C.Otro ejemplo de autocompilador es el Ccc32, compilador deC concurrente para Windows COMPILADORES 5º NIVEL INGENIERIA PUCESI
  12. 12. ESTRUCTURA GENERAL DE UN TRADUCTOR Un traductor es un programa que tiene como entradaun texto escrito en un lenguaje (lenguaje fuente) y comosalida produce un texto escrito en un lenguaje (lenguajeobjeto) que preserva el significado de origen. Ejemplosde traductores son los ensambladores y loscompiladores. COMPILADORES 5º NIVEL INGENIERIA PUCESI
  13. 13. ESTRUCTURA GENERAL DE UN TRADUCTOR En el proceso de traducción se identifican dos fasesprincipales: COMPILADORES 5º NIVEL INGENIERIA PUCESI
  14. 14. ESTRUCTURA GENERAL DE UN TRADUCTOR Fase de análisis COMPILADORES 5º NIVEL INGENIERIA PUCESI
  15. 15. ESTRUCTURA GENERAL DE UN TRADUCTOR Fase de Síntesis COMPILADORES 5º NIVEL INGENIERIA PUCESI
  16. 16. ESTRUCTURA GENERAL DE UN TRADUCTOR Algunos ejemplos de traductores son los compiladores (tomacomo entrada código en alto nivel y genera como salidacódigo en bajo nivel), los interpretes (toma como entradacódigo en alto nivel y genera como salida un códigointermedio), los preprocesadores (toma como entrada códigoen alto nivel y genera como salida código en alto nivel) y elensamblador (toma como entrada código en ensamblador ygenera como salida código en bajo nivel).Su estructura podría ser expresada de la siguiente manera:código fuente -→>> traductor -→> código objeto COMPILADORES 5º NIVEL INGENIERIA PUCESI
  17. 17. ENSAMBLADORES El programa ensamblador es el programa que realiza la traducciónde un programa escrito en ensamblador a lenguaje máquina. Estatraducción es directa e inmediata, ya que las instrucciones enensamblador no son más que nemotécnicos de las instruccionesmáquina que ejecuta directamente la CPU.Tipos de ensambladoresPodemos distinguir entre tres tipos de ensambladores: COMPILADORES 5º NIVEL INGENIERIA PUCESI
  18. 18. ENSAMBLADORES Ensambladores básicos. Son de muy bajo nivel, y su tarea consistebásicamente en ofrecer nombres simbólicos a las distintasinstrucciones. Ensambladores modulares, o macro ensambladores. Descendientes de los ensambladores básicos. Hacen todo lo que puede hacer un ensamblador, y además proporcionan una serie de directivas para definir e invocar macroinstrucciones. Ensambladores modulares 32-bits o de alto nivel. Son ensambladores que aparecieron como respuesta a una nueva arquitectura de procesadores de 32 bits, realizan la misma tarea que los anteriores, permitiendo también el uso de macros, permiten utilizar estructuras de programación más complejas propias de los lenguajes de alto nivel. COMPILADORES 5º NIVEL INGENIERIA PUCESI
  19. 19. FASES DE UN COMPILADOR  Un compilador es un programa informático que traduce un programa escrito en un lenguaje de programación a otro lenguaje de programación, es decir programa que permite traducir el código fuente de un programa en lenguaje de alto nivel, a otro lenguaje de nivel inferior (lenguaje máquina). Generando un programa equivalente a capaz de interpretar. COMPILADORES 5º NIVEL INGENIERIA PUCESI
  20. 20. FASES DE UN COMPILADOR  Estructura de un Compilador COMPILADORES 5º NIVEL INGENIERIA PUCESI
  21. 21. FASES DE UN COMPILADOR  Cualquier compilador debe realizar dos tareas principales: análisis del programa a compilar y síntesis de un programa en lenguaje maquina. Para el estudio de un compilador, es necesario dividir su trabajo en fases. Cada fase representa una transformación al código fuente para obtener el código objeto. En cada una de las fases se utiliza un administrador de la tabla de símbolos y un manejador de errores. COMPILADORES 5º NIVEL INGENIERIA PUCESI
  22. 22. FASES DE UN COMPILADOR  Componentes en que se divide un compilador:  Análisis Léxico. En esta fase se lee los caracteres del programa fuente y se agrupan en cadenas que representan los componentes léxicos. A la secuencia de caracteres que representa un componente léxico se le llama lexema (o con su nombre en inglés token). Análisis Sintáctico. Los componentes léxicos se agrupan en frases gramaticales que el compilador utiliza para sintetizar la salida. Análisis Semántico. Intenta detectar instrucciones que tengan la estructura sintáctica correcta, pero que no tengan significado para la operación implicada. COMPILADORES 5º NIVEL INGENIERIA PUCESI
  23. 23. FASES DE UN COMPILADOR  Generación de código Intermedio. Se puede considerar esta operación intermedia como un subprograma para una máquina abstracta, a esta representación debe tener dos propiedades importantes: debe ser fácil de producir y fácil de traducir al programa objeto. Optimización de Código. Se trata de mejorar el código intermedio, de modo que resulte un código de máquina más rápido de ejecutar. Generación de Código. Esta constituye la fase final de un compilador. Administrador de la tabla de símbolos. Se encarga de manejar los accesos a la tabla de símbolos, en cada una de las etapas de compilación de un programa. Manejador de errores. Es posible encontrar errores. De esta forma podrán controlarse más eficientemente los errores encontrados en cada una de las fases de la compilación de un programa. COMPILADORES 5º NIVEL INGENIERIA PUCESI
  24. 24. INTERPRETES Los intérpretes realizan normalmente dos operaciones:Traducen el código fuente a un formato interno.Ejecutan o interpretan el programa traducido al formato interno.La primera parte del intérprete se llama a veces "el compilador",aunque el código interno que genera no es el lenguaje de lamáquina, ni siquiera lenguaje simbólico, ni tampoco un lenguajede alto nivel. COMPILADORES 5º NIVEL INGENIERIA PUCESI
  25. 25. INTERPRETES Estructura del Intérprete  COMPILADORES 5º NIVEL INGENIERIA PUCESI
  26. 26. INTERPRETES Particularidades de la interpretación:Ahorra memoria.Produce un resultado que no se puede almacenar, lo cual hace laejecución lenta.No demasiado eficiente, cada vez que se entre en un bucle seanalizaran sus sentencias.Facilita el proceso de depuración.No produce resultados transportables.La interpretación es útil en:Sistemas interactivos.Programas de pequeña envergadura.Programas de prototipo y de enseñanza. COMPILADORES 5º NIVEL INGENIERIA PUCESI

×