SlideShare una empresa de Scribd logo
PUCESI
            ESCUELA DE INGENIERIA EN SISTEMAS




COMPILADORES 5º NIVEL
  INGENIERIA PUCESI
BOOTSTRAPPING
           
El bootstrapping (literalmente "truco o trampa de arranque"1) se
basa en utilizar las facilidades que ofrece un lenguaje para
compilarse a sí mismo. El bootstrapping puede plantear la
cuestión: ¿Qué fue primero, el huevo o la gallina?
Una forma de bootstrapping es construir el compilador de un
lenguaje a partir de un subconjunto de dicho lenguaje. Supóngase
que un nuevo lenguaje L se va a implementar en una máquina M.
Como primer paso se puede escribir un pequeño compilador que
traduce un subconjunto S de L a un lenguaje objeto que es el
código de la máquina M; es decir un compilador SMM. Entonces se
puede usar el subconjunto S para escribir un compilador LSM para
L. Cuando LSM se ejecuta a través de SMM, se obtiene una
implementación de L, que es LMM. El lenguaje Neliac (un derivado
del Algol) fue uno de los primeros lenguajes que se implementó a
partir de su propio lenguaje.
                       COMPILADORES 5º NIVEL
                         INGENIERIA PUCESI
BOOTSTRAPPING
           
El lenguaje Pascal fue implementado por primera vez por Niklaus
Wirth (1971) por medio de un compilador escrito en un
subconjunto del Pascal (más del 60%). También escribió un
compilador de este subconjunto en un lenguaje de bajo nivel, y por
medio de varios booststrapping logró construir un compilador
para el Pascal completo. Los métodos utilizados para realizar el
booststrapping de los compiladores de Pascal se describen por
Lecarme y Peyrolle-Thomas.
Las mayores ventajas del bootstrapping se producen cuando un
compilador se escribe en el lenguaje que se compila. Supóngase
que escribimos un un compilador LLN, para un lenguaje L, escrito
en L para una máquina N. Pero las tareas de desarrollo se llevan a
cabo en otra máquina M, donde existe un compilador LMM. En un
primer paso se obtiene un compilador cruzado LMN, que se
ejecuta sobre M y produce el código para N:
                        COMPILADORES 5º NIVEL
                          INGENIERIA PUCESI
BOOTSTRAPPING
           


El compilador LLN puede compilarse por segunda vez, pero ahora
usando el generado por el compilador cruzado:




          COMPILADORES 5º NIVEL
            INGENIERIA PUCESI
BOOTSTRAPPING
          
El resultado de la segunda compilación es un
compilador LNN que se ejecuta en una máquina N, y
produce un código para N. Sin embargo el compilador
está construido en una máquina M (véase ejemplo 4.1).
El proceso se muestra en la siguiente figura:




                   COMPILADORES 5º NIVEL
                     INGENIERIA PUCESI
BOOTSTRAPPING
           
Utilizando las técnicas del bootstrapping, un compilador puede
optimizarse a sí mismo. Supongamos todo el desarrollo en una
máquina dada M. Tenemos SSM, un buen compilador optimizado
para el lenguaje S escrito en S, y queremos SMM, un buen
compilador optimizado escrito en M.
Se puede construir SM*M*, un compilador poco optimizado de S
en 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 una
implementación peor del compilador que genera peor código). Sin
embargo, se puede usar este compilador no optimizado, para
obtener un buen compilador de S en dos pasos:


                       COMPILADORES 5º NIVEL
                         INGENIERIA PUCESI
BOOTSTRAPPING
          
 Ejemplo 5.1: Compilador de FORTRAN H

La técnica de bootstrapping se ha utilizado para el
desarrollo del compilador FORTRAN H. El compilador
se escribió en FORTRAN. El primer paso fue convertir
la ejecución sobre un IBM 7094 a un System/360, una
tarea dura. El segundo paso fue optimizarse, pasar de
un tamaño de alrededor de 550K a unos 400K bytes.


                   COMPILADORES 5º NIVEL
                     INGENIERIA PUCESI
BOOTSTRAPPING
           
Ejemplo 5.2: Compilador de Pascal
Ammann describe como se desarrolló el compilador de
Pascal, 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 ordenadores
CDC). Este primer conjunto se denominó Pascal sin revisar
PSR. Por medio de un bootstrapping se consiguió un
compilador PSR60006000*, denotando por 6000, el código de
las serie CDC 6000, y por 6000* el código no óptimo.
                     COMPILADORES 5º NIVEL
                       INGENIERIA PUCESI
BOOTSTRAPPING
          
b) Se programó un nuevo compilador de Pascal
revisado P, utilizando el Pascal sin revisar, PPSR6000.
c) Se compila el compilador obtenido en b) con el
obtenido en a), y se obtiene P6000*6000

d) Se vuelve a programar un compilador de Pascal
revisado, pero esta vez en Pascal revisado, PP6000.



                    COMPILADORES 5º NIVEL
                      INGENIERIA PUCESI
BOOTSTRAPPING
           
e) Se compila el compilador d) con el obtenido en c) y se
obtiene por fin P60006000.




                     COMPILADORES 5º NIVEL
                       INGENIERIA PUCESI
AUTOCOMPILADOR
       
Un autocompilador de un lenguaje es un compilador que puede
compilarse a sí mismo. Es decir el lenguaje fuente y el lenguaje
de implementación es el mismo, y el compilador es capaza
de compilar el programa fuente del propio compilador. No
debe confundirse autocompilación con bootstrapping, la
autocompilación puede ser el resultado final de un
bootstrapping, pero también puede llegarse a ella utilizando
otro compilador del mismo lenguaje.
Hendrix relata como construir un autocompilador de Small C
(un subconjunto del lenguaje C). El libro incluye un disquete
con todos los fuentes y un compilador de Small C.
Otro ejemplo de autocompilador es el Ccc32, compilador de
C concurrente para Windows
                       COMPILADORES 5º NIVEL
                         INGENIERIA PUCESI
ESTRUCTURA GENERAL DE
     UN TRADUCTOR
                          
Un traductor es un programa que tiene como entrada
un texto escrito en un lenguaje (lenguaje fuente) y como
salida produce un texto escrito en un lenguaje (lenguaje
objeto) que preserva el significado de origen. Ejemplos
de traductores son los ensambladores y los
compiladores.




                    COMPILADORES 5º NIVEL
                      INGENIERIA PUCESI
ESTRUCTURA GENERAL DE
     UN TRADUCTOR
                             
En el proceso de traducción se identifican dos fases
principales:




                       COMPILADORES 5º NIVEL
                         INGENIERIA PUCESI
ESTRUCTURA GENERAL DE
     UN TRADUCTOR
                         
Fase de análisis




                   COMPILADORES 5º NIVEL
                     INGENIERIA PUCESI
ESTRUCTURA GENERAL DE
     UN TRADUCTOR
                           
Fase de Síntesis




                   COMPILADORES 5º NIVEL
                     INGENIERIA PUCESI
ESTRUCTURA GENERAL DE
     UN TRADUCTOR
                            
Algunos ejemplos de traductores son los compiladores (toma
como entrada código en alto nivel y genera como salida
código en bajo nivel), los interpretes (toma como entrada
código en alto nivel y genera como salida un código
intermedio), los preprocesadores (toma como entrada código
en alto nivel y genera como salida código en alto nivel) y el
ensamblador (toma como entrada código en ensamblador y
genera 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
ENSAMBLADORES
            
El programa ensamblador es el programa que realiza la traducción
de un programa escrito en ensamblador a lenguaje máquina. Esta
traducción es directa e inmediata, ya que las instrucciones en
ensamblador no son más que nemotécnicos de las instrucciones
máquina que ejecuta directamente la CPU.


Tipos de ensambladores

Podemos     distinguir   entre    tres   tipos   de   ensambladores:


                         COMPILADORES 5º NIVEL
                           INGENIERIA PUCESI
ENSAMBLADORES
           
Ensambladores básicos. Son de muy bajo nivel, y su tarea consiste
básicamente en ofrecer nombres simbólicos a las distintas
instrucciones.
 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
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
FASES DE UN COMPILADOR
                          
 Estructura de un Compilador




                    COMPILADORES 5º NIVEL
                      INGENIERIA PUCESI
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
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
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
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 la
máquina, ni siquiera lenguaje simbólico, ni tampoco un lenguaje
de alto nivel.




                        COMPILADORES 5º NIVEL
                          INGENIERIA PUCESI
INTERPRETES
 Estructura del Intérprete 




             COMPILADORES 5º NIVEL
               INGENIERIA PUCESI
INTERPRETES
                 
Particularidades de la interpretación:
Ahorra memoria.
Produce un resultado que no se puede almacenar, lo cual hace la
ejecución lenta.
No demasiado eficiente, cada vez que se entre en un bucle se
analizaran 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

Más contenido relacionado

La actualidad más candente

Actividad 2 Analizador léxico, sintáctico y semántico
Actividad 2 Analizador léxico, sintáctico y semántico Actividad 2 Analizador léxico, sintáctico y semántico
Actividad 2 Analizador léxico, sintáctico y semántico maryr_
 
Flex y bison
Flex y bisonFlex y bison
Flex y bison
Der Col Bold
 
Interprete vs compilador
Interprete vs compiladorInterprete vs compilador
Interprete vs compilador
Elba Sepúlveda
 
Ingeniería de requisitos
Ingeniería de requisitosIngeniería de requisitos
Ingeniería de requisitosZuleima
 
Tema 1 introducción compilador
Tema 1 introducción compiladorTema 1 introducción compilador
Tema 1 introducción compilador
Pablo Alberto Ponce Lopaczek
 
Software Empotrado
Software EmpotradoSoftware Empotrado
Software Empotradochivivi
 
Sistemas Distribuidos basados en la Web
Sistemas Distribuidos basados en la WebSistemas Distribuidos basados en la Web
Sistemas Distribuidos basados en la Web
Tensor
 
Cuadro comparativo
Cuadro comparativoCuadro comparativo
Cuadro comparativo
jorge paez
 
Sistemas operativos
Sistemas operativosSistemas operativos
Sistemas operativos
David Rodríguez Gómez
 
Ensamblador y enlazador
Ensamblador y enlazadorEnsamblador y enlazador
Ensamblador y enlazador
RickyZhengHu
 
Construccion y Pruebas de Software
Construccion y Pruebas de SoftwareConstruccion y Pruebas de Software
Construccion y Pruebas de SoftwareGustavo Bazan Maal
 
Teoría general de sistemas (tgs) 6
Teoría general de sistemas (tgs) 6Teoría general de sistemas (tgs) 6
Teoría general de sistemas (tgs) 6
Juan Manuel Carrión Delgado
 
Tipos y caracteristicas de servidores
Tipos y caracteristicas de servidoresTipos y caracteristicas de servidores
Tipos y caracteristicas de servidores
Rene Martinez
 
Modelo de proceso especializado
Modelo de proceso especializadoModelo de proceso especializado
Modelo de proceso especializado
Francisco Arce Garcia
 
Modelos de programacion
Modelos de  programacionModelos de  programacion
Modelos de programacion
David Rodríguez Gómez
 
Evolución de la Programación
Evolución de la ProgramaciónEvolución de la Programación
Evolución de la Programación
Alessandro Viera
 
Clasificación de las memorias en informática
Clasificación de las memorias en informáticaClasificación de las memorias en informática
Clasificación de las memorias en informáticaa11konti
 
Clase 5 teoría de sistemas
Clase 5    teoría de sistemasClase 5    teoría de sistemas
Clase 5 teoría de sistemas
Germán Sosa Ramírez
 
Analisis Lexico
Analisis LexicoAnalisis Lexico
Analisis LexicoFARIDROJAS
 

La actualidad más candente (20)

Actividad 2 Analizador léxico, sintáctico y semántico
Actividad 2 Analizador léxico, sintáctico y semántico Actividad 2 Analizador léxico, sintáctico y semántico
Actividad 2 Analizador léxico, sintáctico y semántico
 
Flex y bison
Flex y bisonFlex y bison
Flex y bison
 
Interprete vs compilador
Interprete vs compiladorInterprete vs compilador
Interprete vs compilador
 
Ingeniería de requisitos
Ingeniería de requisitosIngeniería de requisitos
Ingeniería de requisitos
 
Tema 1 introducción compilador
Tema 1 introducción compiladorTema 1 introducción compilador
Tema 1 introducción compilador
 
Analizador lexico
Analizador lexicoAnalizador lexico
Analizador lexico
 
Software Empotrado
Software EmpotradoSoftware Empotrado
Software Empotrado
 
Sistemas Distribuidos basados en la Web
Sistemas Distribuidos basados en la WebSistemas Distribuidos basados en la Web
Sistemas Distribuidos basados en la Web
 
Cuadro comparativo
Cuadro comparativoCuadro comparativo
Cuadro comparativo
 
Sistemas operativos
Sistemas operativosSistemas operativos
Sistemas operativos
 
Ensamblador y enlazador
Ensamblador y enlazadorEnsamblador y enlazador
Ensamblador y enlazador
 
Construccion y Pruebas de Software
Construccion y Pruebas de SoftwareConstruccion y Pruebas de Software
Construccion y Pruebas de Software
 
Teoría general de sistemas (tgs) 6
Teoría general de sistemas (tgs) 6Teoría general de sistemas (tgs) 6
Teoría general de sistemas (tgs) 6
 
Tipos y caracteristicas de servidores
Tipos y caracteristicas de servidoresTipos y caracteristicas de servidores
Tipos y caracteristicas de servidores
 
Modelo de proceso especializado
Modelo de proceso especializadoModelo de proceso especializado
Modelo de proceso especializado
 
Modelos de programacion
Modelos de  programacionModelos de  programacion
Modelos de programacion
 
Evolución de la Programación
Evolución de la ProgramaciónEvolución de la Programación
Evolución de la Programación
 
Clasificación de las memorias en informática
Clasificación de las memorias en informáticaClasificación de las memorias en informática
Clasificación de las memorias en informática
 
Clase 5 teoría de sistemas
Clase 5    teoría de sistemasClase 5    teoría de sistemas
Clase 5 teoría de sistemas
 
Analisis Lexico
Analisis LexicoAnalisis Lexico
Analisis Lexico
 

Similar a Bootstrapping

C:\fakepath\el software libre
C:\fakepath\el software libreC:\fakepath\el software libre
C:\fakepath\el software libre
Danielita Lopez
 
C:\fakepath\el software libre
C:\fakepath\el software libreC:\fakepath\el software libre
C:\fakepath\el software libreDanielita Lopez
 
C:\fakepath\el software libre
C:\fakepath\el software libreC:\fakepath\el software libre
C:\fakepath\el software libreDLACGP
 
C:\fakepath\el software libre
C:\fakepath\el software libreC:\fakepath\el software libre
C:\fakepath\el software libre
Danielita Lopez
 
C:\fakepath\compilador
C:\fakepath\compiladorC:\fakepath\compilador
C:\fakepath\compiladorDLACGP
 
C:\fakepath\el software libre
C:\fakepath\el software libreC:\fakepath\el software libre
C:\fakepath\el software libre
Danielita Lopez
 
C:\documents and settings\clientea\mis documentos\compiladores
C:\documents and settings\clientea\mis documentos\compiladoresC:\documents and settings\clientea\mis documentos\compiladores
C:\documents and settings\clientea\mis documentos\compiladoresNancyandRegina317
 
C:\fakepath\compiladores
C:\fakepath\compiladoresC:\fakepath\compiladores
C:\fakepath\compiladorespaulina8
 
Arquitecturas de ordenadores y compiladores cruzados
Arquitecturas de ordenadores y compiladores cruzadosArquitecturas de ordenadores y compiladores cruzados
Arquitecturas de ordenadores y compiladores cruzados
DIEGO BAROJA
 
H:\compiladores
H:\compiladoresH:\compiladores
Conceptos de compilador
Conceptos de compiladorConceptos de compilador
Conceptos de compiladorJoel Soto
 
Conceptos De Compilador
Conceptos De CompiladorConceptos De Compilador
Conceptos De CompiladorJoel Soto
 
Compilador Funcionamiento
Compilador FuncionamientoCompilador Funcionamiento
Compilador Funcionamiento
Kriz Kozlov
 
Trabajo de compiladores completo alexandra
Trabajo de compiladores completo alexandraTrabajo de compiladores completo alexandra
Trabajo de compiladores completo alexandraAlexandraMolinaSanchez
 
Presentacion de procesadores de lenguajes
Presentacion de procesadores de lenguajesPresentacion de procesadores de lenguajes
Presentacion de procesadores de lenguajes
DIEGO BAROJA
 
Cap2
Cap2Cap2
Cap2CJAO
 
C:\fakepath\compiladores
C:\fakepath\compiladoresC:\fakepath\compiladores
C:\fakepath\compiladorespaulina8
 
Trabajo de presentacion
Trabajo de presentacionTrabajo de presentacion
Trabajo de presentaciondodi1997
 
Introduccion a los compiladores
Introduccion a los compiladoresIntroduccion a los compiladores
Introduccion a los compiladores
Alexander Campues
 
Compiladores diapositivas
Compiladores diapositivasCompiladores diapositivas
Compiladores diapositivasjonathangrief
 

Similar a Bootstrapping (20)

C:\fakepath\el software libre
C:\fakepath\el software libreC:\fakepath\el software libre
C:\fakepath\el software libre
 
C:\fakepath\el software libre
C:\fakepath\el software libreC:\fakepath\el software libre
C:\fakepath\el software libre
 
C:\fakepath\el software libre
C:\fakepath\el software libreC:\fakepath\el software libre
C:\fakepath\el software libre
 
C:\fakepath\el software libre
C:\fakepath\el software libreC:\fakepath\el software libre
C:\fakepath\el software libre
 
C:\fakepath\compilador
C:\fakepath\compiladorC:\fakepath\compilador
C:\fakepath\compilador
 
C:\fakepath\el software libre
C:\fakepath\el software libreC:\fakepath\el software libre
C:\fakepath\el software libre
 
C:\documents and settings\clientea\mis documentos\compiladores
C:\documents and settings\clientea\mis documentos\compiladoresC:\documents and settings\clientea\mis documentos\compiladores
C:\documents and settings\clientea\mis documentos\compiladores
 
C:\fakepath\compiladores
C:\fakepath\compiladoresC:\fakepath\compiladores
C:\fakepath\compiladores
 
Arquitecturas de ordenadores y compiladores cruzados
Arquitecturas de ordenadores y compiladores cruzadosArquitecturas de ordenadores y compiladores cruzados
Arquitecturas de ordenadores y compiladores cruzados
 
H:\compiladores
H:\compiladoresH:\compiladores
H:\compiladores
 
Conceptos de compilador
Conceptos de compiladorConceptos de compilador
Conceptos de compilador
 
Conceptos De Compilador
Conceptos De CompiladorConceptos De Compilador
Conceptos De Compilador
 
Compilador Funcionamiento
Compilador FuncionamientoCompilador Funcionamiento
Compilador Funcionamiento
 
Trabajo de compiladores completo alexandra
Trabajo de compiladores completo alexandraTrabajo de compiladores completo alexandra
Trabajo de compiladores completo alexandra
 
Presentacion de procesadores de lenguajes
Presentacion de procesadores de lenguajesPresentacion de procesadores de lenguajes
Presentacion de procesadores de lenguajes
 
Cap2
Cap2Cap2
Cap2
 
C:\fakepath\compiladores
C:\fakepath\compiladoresC:\fakepath\compiladores
C:\fakepath\compiladores
 
Trabajo de presentacion
Trabajo de presentacionTrabajo de presentacion
Trabajo de presentacion
 
Introduccion a los compiladores
Introduccion a los compiladoresIntroduccion a los compiladores
Introduccion a los compiladores
 
Compiladores diapositivas
Compiladores diapositivasCompiladores diapositivas
Compiladores diapositivas
 

Más de DIEGO BAROJA

Mejores iniciativas ti cs del ecuador 2013
Mejores iniciativas ti cs del ecuador 2013Mejores iniciativas ti cs del ecuador 2013
Mejores iniciativas ti cs del ecuador 2013DIEGO BAROJA
 
LENGUAJES DE PROGRAMACION
LENGUAJES DE PROGRAMACIONLENGUAJES DE PROGRAMACION
LENGUAJES DE PROGRAMACION
DIEGO BAROJA
 
Web 20 en el aula
Web 20 en el aulaWeb 20 en el aula
Web 20 en el aula
DIEGO BAROJA
 
Herramientas web 20 pdf
Herramientas web 20 pdfHerramientas web 20 pdf
Herramientas web 20 pdf
DIEGO BAROJA
 
Herramientas web 20 pdf
Herramientas web 20 pdfHerramientas web 20 pdf
Herramientas web 20 pdf
DIEGO BAROJA
 
Guias modulo computacion
Guias modulo computacionGuias modulo computacion
Guias modulo computacion
DIEGO BAROJA
 
Guias modulo computacion
Guias modulo computacionGuias modulo computacion
Guias modulo computacion
DIEGO BAROJA
 

Más de DIEGO BAROJA (7)

Mejores iniciativas ti cs del ecuador 2013
Mejores iniciativas ti cs del ecuador 2013Mejores iniciativas ti cs del ecuador 2013
Mejores iniciativas ti cs del ecuador 2013
 
LENGUAJES DE PROGRAMACION
LENGUAJES DE PROGRAMACIONLENGUAJES DE PROGRAMACION
LENGUAJES DE PROGRAMACION
 
Web 20 en el aula
Web 20 en el aulaWeb 20 en el aula
Web 20 en el aula
 
Herramientas web 20 pdf
Herramientas web 20 pdfHerramientas web 20 pdf
Herramientas web 20 pdf
 
Herramientas web 20 pdf
Herramientas web 20 pdfHerramientas web 20 pdf
Herramientas web 20 pdf
 
Guias modulo computacion
Guias modulo computacionGuias modulo computacion
Guias modulo computacion
 
Guias modulo computacion
Guias modulo computacionGuias modulo computacion
Guias modulo computacion
 

Bootstrapping

  • 1. PUCESI ESCUELA DE INGENIERIA EN SISTEMAS COMPILADORES 5º NIVEL INGENIERIA PUCESI
  • 2. BOOTSTRAPPING  El bootstrapping (literalmente "truco o trampa de arranque"1) se basa en utilizar las facilidades que ofrece un lenguaje para compilarse a sí mismo. El bootstrapping puede plantear la cuestión: ¿Qué fue primero, el huevo o la gallina? Una forma de bootstrapping es construir el compilador de un lenguaje a partir de un subconjunto de dicho lenguaje. Supóngase que un nuevo lenguaje L se va a implementar en una máquina M. Como primer paso se puede escribir un pequeño compilador que traduce un subconjunto S de L a un lenguaje objeto que es el código de la máquina M; es decir un compilador SMM. Entonces se puede usar el subconjunto S para escribir un compilador LSM para L. Cuando LSM se ejecuta a través de SMM, se obtiene una implementación de L, que es LMM. El lenguaje Neliac (un derivado del Algol) fue uno de los primeros lenguajes que se implementó a partir de su propio lenguaje. COMPILADORES 5º NIVEL INGENIERIA PUCESI
  • 3. BOOTSTRAPPING  El lenguaje Pascal fue implementado por primera vez por Niklaus Wirth (1971) por medio de un compilador escrito en un subconjunto del Pascal (más del 60%). También escribió un compilador de este subconjunto en un lenguaje de bajo nivel, y por medio de varios booststrapping logró construir un compilador para el Pascal completo. Los métodos utilizados para realizar el booststrapping de los compiladores de Pascal se describen por Lecarme y Peyrolle-Thomas. Las mayores ventajas del bootstrapping se producen cuando un compilador se escribe en el lenguaje que se compila. Supóngase que escribimos un un compilador LLN, para un lenguaje L, escrito en L para una máquina N. Pero las tareas de desarrollo se llevan a cabo en otra máquina M, donde existe un compilador LMM. En un primer paso se obtiene un compilador cruzado LMN, que se ejecuta sobre M y produce el código para N: COMPILADORES 5º NIVEL INGENIERIA PUCESI
  • 4. BOOTSTRAPPING  El compilador LLN puede compilarse por segunda vez, pero ahora usando el generado por el compilador cruzado: COMPILADORES 5º NIVEL INGENIERIA PUCESI
  • 5. BOOTSTRAPPING  El resultado de la segunda compilación es un compilador LNN que se ejecuta en una máquina N, y produce un código para N. Sin embargo el compilador está 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. BOOTSTRAPPING  Utilizando las técnicas del bootstrapping, un compilador puede optimizarse a sí mismo. Supongamos todo el desarrollo en una máquina dada M. Tenemos SSM, un buen compilador optimizado para el lenguaje S escrito en S, y queremos SMM, un buen compilador optimizado escrito en M. Se puede construir SM*M*, un compilador poco optimizado de S en 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 una implementación peor del compilador que genera peor código). Sin embargo, se puede usar este compilador no optimizado, para obtener un buen compilador de S en dos pasos: COMPILADORES 5º NIVEL INGENIERIA PUCESI
  • 7. BOOTSTRAPPING   Ejemplo 5.1: Compilador de FORTRAN H La técnica de bootstrapping se ha utilizado para el desarrollo del compilador FORTRAN H. El compilador se escribió en FORTRAN. El primer paso fue convertir la ejecución sobre un IBM 7094 a un System/360, una tarea dura. El segundo paso fue optimizarse, pasar de un tamaño de alrededor de 550K a unos 400K bytes. COMPILADORES 5º NIVEL INGENIERIA PUCESI
  • 8. BOOTSTRAPPING  Ejemplo 5.2: Compilador de Pascal Ammann describe como se desarrolló el compilador de Pascal, 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 ordenadores CDC). Este primer conjunto se denominó Pascal sin revisar PSR. Por medio de un bootstrapping se consiguió un compilador PSR60006000*, denotando por 6000, el código de las serie CDC 6000, y por 6000* el código no óptimo. COMPILADORES 5º NIVEL INGENIERIA PUCESI
  • 9. BOOTSTRAPPING  b) Se programó un nuevo compilador de Pascal revisado P, utilizando el Pascal sin revisar, PPSR6000. c) Se compila el compilador obtenido en b) con el obtenido en a), y se obtiene P6000*6000 d) Se vuelve a programar un compilador de Pascal revisado, pero esta vez en Pascal revisado, PP6000. COMPILADORES 5º NIVEL INGENIERIA PUCESI
  • 10. BOOTSTRAPPING  e) Se compila el compilador d) con el obtenido en c) y se obtiene por fin P60006000. COMPILADORES 5º NIVEL INGENIERIA PUCESI
  • 11. AUTOCOMPILADOR  Un autocompilador de un lenguaje es un compilador que puede compilarse a sí mismo. Es decir el lenguaje fuente y el lenguaje de implementación es el mismo, y el compilador es capaza de compilar el programa fuente del propio compilador. No debe confundirse autocompilación con bootstrapping, la autocompilación puede ser el resultado final de un bootstrapping, pero también puede llegarse a ella utilizando otro compilador del mismo lenguaje. Hendrix relata como construir un autocompilador de Small C (un subconjunto del lenguaje C). El libro incluye un disquete con todos los fuentes y un compilador de Small C. Otro ejemplo de autocompilador es el Ccc32, compilador de C concurrente para Windows COMPILADORES 5º NIVEL INGENIERIA PUCESI
  • 12. ESTRUCTURA GENERAL DE UN TRADUCTOR  Un traductor es un programa que tiene como entrada un texto escrito en un lenguaje (lenguaje fuente) y como salida produce un texto escrito en un lenguaje (lenguaje objeto) que preserva el significado de origen. Ejemplos de traductores son los ensambladores y los compiladores. COMPILADORES 5º NIVEL INGENIERIA PUCESI
  • 13. ESTRUCTURA GENERAL DE UN TRADUCTOR  En el proceso de traducción se identifican dos fases principales: COMPILADORES 5º NIVEL INGENIERIA PUCESI
  • 14. ESTRUCTURA GENERAL DE UN TRADUCTOR  Fase de análisis COMPILADORES 5º NIVEL INGENIERIA PUCESI
  • 15. ESTRUCTURA GENERAL DE UN TRADUCTOR  Fase de Síntesis COMPILADORES 5º NIVEL INGENIERIA PUCESI
  • 16. ESTRUCTURA GENERAL DE UN TRADUCTOR  Algunos ejemplos de traductores son los compiladores (toma como entrada código en alto nivel y genera como salida código en bajo nivel), los interpretes (toma como entrada código en alto nivel y genera como salida un código intermedio), los preprocesadores (toma como entrada código en alto nivel y genera como salida código en alto nivel) y el ensamblador (toma como entrada código en ensamblador y genera 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. ENSAMBLADORES  El programa ensamblador es el programa que realiza la traducción de un programa escrito en ensamblador a lenguaje máquina. Esta traducción es directa e inmediata, ya que las instrucciones en ensamblador no son más que nemotécnicos de las instrucciones máquina que ejecuta directamente la CPU. Tipos de ensambladores Podemos distinguir entre tres tipos de ensambladores: COMPILADORES 5º NIVEL INGENIERIA PUCESI
  • 18. ENSAMBLADORES  Ensambladores básicos. Son de muy bajo nivel, y su tarea consiste básicamente en ofrecer nombres simbólicos a las distintas instrucciones.  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. 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. FASES DE UN COMPILADOR   Estructura de un Compilador COMPILADORES 5º NIVEL INGENIERIA PUCESI
  • 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. 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. 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. 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 la máquina, ni siquiera lenguaje simbólico, ni tampoco un lenguaje de alto nivel. COMPILADORES 5º NIVEL INGENIERIA PUCESI
  • 25. INTERPRETES  Estructura del Intérprete  COMPILADORES 5º NIVEL INGENIERIA PUCESI
  • 26. INTERPRETES  Particularidades de la interpretación: Ahorra memoria. Produce un resultado que no se puede almacenar, lo cual hace la ejecución lenta. No demasiado eficiente, cada vez que se entre en un bucle se analizaran 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