SlideShare una empresa de Scribd logo
1 de 14
Descargar para leer sin conexión
UNIVERSIDAD NACIONAL DE EDUCACIÓN A DISTANCIA
                    Escuela Técnica Superior de Ingeniería Informática
                                  Procesadores de Lenguajes




                                        Tema 1
                                        Introducción




                                                              Javier Vélez Reyes
                                                              jvelez@lsi.uned.es




Javier Vélez Reyes jvelez@lsi.uned.es


                                             Objetivos del Tema
       Aprender qué es un compilador
       Conocer los tipos de compiladores que existen
       Conocer la diferencia entre compilador e interprete
       Familiarizarse con el contexto de un compilador
       Aprender la estructura y fases de un compilador
Javier Vélez Reyes jvelez@lsi.uned.es


                                                            Índice General
       ¿Qué es un compilador?
       Compiladores e interpretes
       Contexto de un compilador
       Tipos de compiladores
       Estructura de un compilador




Javier Vélez Reyes jvelez@lsi.uned.es


                                        ¿Qué es un compilador?

                                                Traductor         Lenguaje
               Lenguaje                        Traductor           objeto
                fuente


                                         Alto Nivel               Traductor

                Lenguaje
                 objeto

                                         Bajo Nivel               Compilador


                Un compilador es un programa que lee un programa
               Un compilador es un programa que lee un programa
                escrito en lenguaje fuente lo traduce a un lenguaje
               escrito en lenguaje fuente,,yylo traduce a un lenguaje
                objetode bajo nivel. Además generará una lista de los
               objeto de bajo nivel. Además generará una lista de los
                posibles errores que tenga el programa fuente
               posibles errores que tenga el programa fuente
Javier Vélez Reyes jvelez@lsi.uned.es


                                           Índice General
       ¿Qué es un compilador?
       Compiladores e interpretes
       Contexto de un compilador
       Tipos de compiladores
       Estructura de un compilador




Javier Vélez Reyes jvelez@lsi.uned.es


                                Compiladores e interpretes
       Compiladores
            Una única compilación
            Mayor velocidad ejecución
            Mayor detalle de errores
            Mayor consumo de memoria
       Interpretes
            Interpretación en ejecución
            Menor velocidad ejecución
            Menor detalle de errores
            Menor consumo de memoria
Javier Vélez Reyes jvelez@lsi.uned.es


                                                             Índice General
       ¿Qué es un compilador?
       Compiladores e interpretes
       Contexto de un compilador
       Tipos de compiladores
       Estructura de un compilador




Javier Vélez Reyes jvelez@lsi.uned.es


                                Contexto de un compilador
                                               .C               .H
       Contexto                               .C               .H

            Precompilador                       Precompilador
                                               Precompilador
            Compilador
            Enlazador (montador)                        .C
                                                       .C                    .ASM
                                                                            .ASM
            Depurador
            Ensamblador                             Compilador
                                                    Compilador            Ensamblador
                                                                         Ensamblador


            .DLL                                        .OBJ
                                                       .OBJ       .OBJ
                                                                 .OBJ        .OBJ
                                                                            .OBJ
           .DLL


        WIN.EXE                      .LIB
                                    .LIB                          Enlazador
                                                                 Enlazador
        WIN.EXE

          .EXE
         .EXE                   Ensamblador
                               Ensamblador                .ASM
                                                         .ASM                   .EXE
                                                                               .EXE
Javier Vélez Reyes jvelez@lsi.uned.es


                                               Índice General
       ¿Qué es un compilador?
       Compiladores e interpretes
       Contexto de un compilador
       Tipos de compiladores
       Estructura de un compilador




Javier Vélez Reyes jvelez@lsi.uned.es


                                        Tipos de compiladores
       Tipos de compiladores
            Ensamblador
            Compilador cruzado
            Compilador con montador
            Autocompilador
            Metacompilador
            Descompilador
Javier Vélez Reyes jvelez@lsi.uned.es


                                                              Índice General
       ¿Qué es un compilador?
       Compiladores e interpretes
       Contexto de un compilador
       Tipos de compiladores
       Estructura de un compilador




Javier Vélez Reyes jvelez@lsi.uned.es


                         Estructura de un compilador
                                            Análisis Léxico
                                            Análisis Léxico
    Independencia
    física
                                          Análisis Sintáctico
                                          Análisis Sintáctico


                                          Análisis Semántico
                                          Análisis Semántico


         Tabla de                       Generación de código
                                        Generación de código         Gestión de
         símbolos                            intermedio
                                            intermedio                errores


                                        Optimización de código
                                        Optimización de código
                                              intermedio
                                             intermedio


                                        Generación de código
                                        Generación de código         Dependencia
                                               objeto
                                              objeto                       física
Javier Vélez Reyes jvelez@lsi.uned.es


                                                          Análisis léxico I
       Tipos de tokens                         El analizador léxico o scanner, transforma
                                              El analizador léxico o scanner, transforma
                                               el texto fuente en una secuencia a
                                              el texto fuente en una secuencia a
            Específicos                        ordenada de elemento léxicamente
                                              ordenada de elemento léxicamente
                 Palabras reservadas           válidos (tokens)
                                              válidos (tokens)
                 Separadores
                 Operadores                                               e
            No específicos                                                l
                 Identificadores                                          i
                                                                          h
                 Constantes                                               w
                 Etiquetas                  G. Errores
                                            G. Errores
       Estructura                        Tabla Símbolos
                                        Tabla Símbolos              Análisis Léxico (G3)
                                                                    Análisis Léxico (G3)
            Tipo
            Lexema                                            [RESERVEDWORD, WHILE]




Javier Vélez Reyes jvelez@lsi.uned.es


                                                         Análisis léxico II
       Tipos de tokens                         El analizador léxico o scanner, transforma
                                              El analizador léxico o scanner, transforma
                                               el texto fuente en una secuencia a
                                              el texto fuente en una secuencia a
            Específicos                        ordenada de elemento léxicamente
                                              ordenada de elemento léxicamente
                 Palabras reservadas           válidos (tokens)
                                              válidos (tokens)
                 Separadores
                 Operadores
            No específicos                                                e
                 Identificadores                                          l
                                                                          i
                 Constantes
                                            G. Errores                    w
                 Etiquetas                  G. Errores      Error   1


       Estructura                        Tabla Símbolos
                                        Tabla Símbolos              Análisis Léxico (G3)
                                                                    Análisis Léxico (G3)
            Tipo
            Lexema                      1 Los errores léxicos son difíciles de
                                        detectar y suelen delegarse en el análisis
                                        sintáctico
Javier Vélez Reyes jvelez@lsi.uned.es


                                                        Análisis léxico III
       Tipos de tokens                            El analizador léxico o scanner, transforma
                                                 El analizador léxico o scanner, transforma
                                                  el texto fuente en una secuencia a
                                                 el texto fuente en una secuencia a
            Específicos                           ordenada de elemento léxicamente
                                                 ordenada de elemento léxicamente
                 Palabras reservadas              válidos (tokens)
                                                 válidos (tokens)
                 Separadores
                 Operadores
            No específicos                                                      d
                 Identificadores                                                a
                                                                                d
                 Constantes
                                             G. Errores                         e
                 Etiquetas                   G. Errores
       Estructura                           Tabla Símbolos
                                           Tabla Símbolos
                                                                ID      Análisis Léxico (G3)
                                                                        Análisis Léxico (G3)
            Tipo
            Lexema                                                      [ID, “edad”]




Javier Vélez Reyes jvelez@lsi.uned.es


                                                    Análisis sintáctico I
       Definición
                                         El analizador sintáctico o parser recibe los tokens
                                        El analizador sintáctico o parser recibe los tokens
                                        yycomprueba su ordenación correcta. Genera un
                                           comprueba su ordenación correcta. Genera un
                                        árbol sintáctico
                                         árbolsintáctico

       Funciones                                                              A := B + C
            Guiar la traducción
            Gestión de errores
            prelación de operadores                                  Análisis Sintáctico (G2)
                                                                     Análisis Sintáctico (G2)
                 A/B*C = A/(B*C)
                 A/B*C = (A/B) * C                                              :=
                                                                          A              +

                                                                                     B       C
Javier Vélez Reyes jvelez@lsi.uned.es


                                                  Análisis sintáctico II
       Definición
                                         El analizador sintáctico o parser recibe los tokens
                                        El analizador sintáctico o parser recibe los tokens
                                        yycomprueba su ordenación correcta. Genera un
                                           comprueba su ordenación correcta. Genera un
                                        árbol sintáctico
                                         árbolsintáctico

       Funciones
            Guiar la traducción
            Gestión de errores
            prelación de operadores
                 A/B*C = A/(B*C)
                                                                             A B := + C
                 A/B*C = (A/B) * C


                                            G. Errores
                                            G. Errores             Análisis Sintáctico (G2)
                                                                   Análisis Sintáctico (G2)




Javier Vélez Reyes jvelez@lsi.uned.es


                                                   Análisis semántico I
       Definición               El analizador semántico comprueba que el árbol
                               El analizador semántico comprueba que el árbol
                                sintáctico es semánticamente válido. Genera un
                               sintáctico es semánticamente válido. Genera un
                                árbol semántico o etiquetado
                               árbol semántico o etiquetado

                                                                                :=
       Validación
                                                                         A               +
            Tipo de resultados intermedios
            Conversiones implícitas de tipos                                         B         C
            Sobrecarga de operadores
                                                           Análisis Sintáctico (G2 + Reglas)
                                                           Análisis Sintáctico (G2 + Reglas)
                                 Tipo A, B, C?                                 :=
                       Tabla Símbolos
                      Tabla Símbolos                                    A                +
                                                                      Real
                                                                                  B           C
                                                                             integer         Real
Javier Vélez Reyes jvelez@lsi.uned.es


                                                 Análisis semántico I
       Definición               El analizador semántico comprueba que el árbol
                               El analizador semántico comprueba que el árbol
                                sintáctico es semánticamente válido. Genera un
                               sintáctico es semánticamente válido. Genera un
                                árbol semántico o etiquetado
                               árbol semántico o etiquetado

                                                                             :=
       Validación
                                                                       A              +
            Tipo de resultados intermedios
            Conversiones implícitas de tipos                                      B       C
            Sobrecarga de operadores
                                                        Análisis Sintáctico (G2 + Reglas)
                                                        Análisis Sintáctico (G2 + Reglas)
                                 Tipo A, B, C?                              :=
                       Tabla Símbolos
                      Tabla Símbolos                                   A              +
                                                                     Real
                                                 Error (B is Char)             B          C
                         G. Errores
                         G. Errores                                         Char      integer




Javier Vélez Reyes jvelez@lsi.uned.es


               Generación de código intermedio
       Definición
                              El generador de código intermedio transforma un árbol
                             El generador de código intermedio transforma un árbol
                              de semántico en una representación en un lenguaje
                             de semántico en una representación en un lenguaje
                              intermedio cercano al código objeto
                             intermedio cercano al código objeto

       Lenguajes sencillos
            Tercetos
            Cuartetos
                                                             L1:      IF A>B GOTO L2
     WHILE (A>B) AND (A<2*B-5) DO                                     GOTO L3
            A:=A+B                                           L2:      T1 := 2*B
                                                                      T2 := T1 – 5
                                                                      IF A< T2 GOTO L4
                     Generación de
                    Generación de                                     GOTO L3
                  código intermedio
                   códigointermedio                          L4:      A := A + B
                                                                      GOTO L1
                                                             L3:      …
Javier Vélez Reyes jvelez@lsi.uned.es


                                        Optimización de código I
       Definición                El optimizador de código realiza modificaciones
                                El optimizador de código realiza modificaciones
                                 sobre el código intermedio para mejorar la
                                sobre el código intermedio para mejorar la
                                eficiencia en velocidad yytamaño.
                                 eficiencia en velocidad tamaño.
       Fases
            Independiente de la máquina
            Dependiente de la máquina
       Eliminación de saltos consecutivos
 L1:        IF A>B GOTO L2                                L1:     IF A<=B GOTO L2
            GOTO L3                                               T1 := 2*B
 L2:        T1 := 2*B                                             T2 := T1 – 5
            T2 := T1 – 5                                          IF A>= T2 GOTO L2
            IF A< T2 GOTO L4              Optimizador
                                          Optimizador             A := A + B
            GOTO L3                                               GOTO L1
 L4:        A := A + B                                    L2:     …
            GOTO L1
 L3:        …




Javier Vélez Reyes jvelez@lsi.uned.es


                                    Optimización de código II
       Definición                El optimizador de código realiza modificaciones
                                El optimizador de código realiza modificaciones
                                 sobre el código intermedio para mejorar la
                                sobre el código intermedio para mejorar la
                                eficiencia en velocidad yytamaño.
                                 eficiencia en velocidad tamaño.
       Fases
            Independiente de la máquina
            Dependiente de la máquina
       Factorización de expresiones comunes

                                                                T1 := B + C
         A := B + C + D
                                           Optimizador
                                           Optimizador          A := T1 + D
         E := B + C + F
                                                                E := T1 + F
Javier Vélez Reyes jvelez@lsi.uned.es


                                  Optimización de código III
       Definición                El optimizador de código realiza modificaciones
                                El optimizador de código realiza modificaciones
                                 sobre el código intermedio para mejorar la
                                sobre el código intermedio para mejorar la
                                eficiencia en velocidad yytamaño.
                                 eficiencia en velocidad tamaño.
       Fases
            Independiente de la máquina
            Dependiente de la máquina
       Extracción de invariantes

     REPEAT                                                     B := 1
            B := 1                         Optimizador
                                           Optimizador          REPEAT
            A := A – B                                                 A := A – B
     UNTIL A = 0                                                UNTIL A = 0




Javier Vélez Reyes jvelez@lsi.uned.es


                           Generación de código objeto
       Definición              El generador de código objeto transforma el código
                              El generador de código objeto transforma el código
                               intermedio optimizado en código objeto de bajo
                              intermedio optimizado en código objeto de bajo
                               nivel
                              nivel

       Lenguaje objeto                                            LD AX, B
                                                                  LD BX, C
            Ensamblador                                           ADD AX, BX
            Código máquina                                        ST AX, A




                                  Generador de código
                                  Generador de código           Generador de código
                                                                Generador de código
  A := B + C                           intermedio                      objeto
                                      intermedio                      objeto
Javier Vélez Reyes jvelez@lsi.uned.es


                                        La tabla de símbolos
       Almacena estructuras de datos
            Variables
            Constantes
            Etiquetas
            Tipos
            Valores
            Signatura de funciones
       Operaciones
            Insertar símbolo
            Consultar símbolo
            Borrar símbolo




Javier Vélez Reyes jvelez@lsi.uned.es


                                          Gestión de errores
       Detección de errores
            Léxicos (se delegan al sintáctico)
            Sintácticos
            Semánticos
       Recuperación de errores
            Parar al primer error
            Recuperar volviendo a un contexto fiable
Javier Vélez Reyes jvelez@lsi.uned.es


                                                          Bibliografía

    [AJO]         AHO, SETHI, ULLMAN: Compiladores: Principios,
                  técnicas y herramientas,: Addison-Wesley
                  Iberoamericana, 1990




[GARRIDO]          A. Garrido, J. Iñesta, F. Moreno y J. Pérez.
                   2002. Diseño de compiladores. Universidad de
                   Alicante.

Más contenido relacionado

Destacado

Analizador sintáctico
Analizador sintácticoAnalizador sintáctico
Analizador sintácticocarmensp
 
Analisis semantico
Analisis semanticoAnalisis semantico
Analisis semanticoAreli Gómez
 
Hardware Y Software
Hardware Y SoftwareHardware Y Software
Hardware Y Softwareaidaa
 
Estrategias de Programación & Estructuras de Datos
Estrategias de Programación & Estructuras de DatosEstrategias de Programación & Estructuras de Datos
Estrategias de Programación & Estructuras de DatosJavier Vélez Reyes
 

Destacado (8)

Analizador sintáctico
Analizador sintácticoAnalizador sintáctico
Analizador sintáctico
 
Analizador léxico
Analizador léxicoAnalizador léxico
Analizador léxico
 
Ps2 u5
Ps2 u5Ps2 u5
Ps2 u5
 
Analisis semantico
Analisis semanticoAnalisis semantico
Analisis semantico
 
Hardware Y Software
Hardware Y SoftwareHardware Y Software
Hardware Y Software
 
Procesadores de Lenguajes I
Procesadores de Lenguajes IProcesadores de Lenguajes I
Procesadores de Lenguajes I
 
Procesadores de Lenguajes II
Procesadores de Lenguajes IIProcesadores de Lenguajes II
Procesadores de Lenguajes II
 
Estrategias de Programación & Estructuras de Datos
Estrategias de Programación & Estructuras de DatosEstrategias de Programación & Estructuras de Datos
Estrategias de Programación & Estructuras de Datos
 

Similar a Introducción a compiladores en

Grupo 1 proceso de lenguajes i
Grupo 1 proceso de lenguajes iGrupo 1 proceso de lenguajes i
Grupo 1 proceso de lenguajes iRossana Sosa
 
Repuesto de expo_de_programacion
Repuesto de expo_de_programacionRepuesto de expo_de_programacion
Repuesto de expo_de_programacionnayeli hernandez
 
Materia unidad compiladores
Materia unidad compiladoresMateria unidad compiladores
Materia unidad compiladoresbachispasaca
 
Tarea de compiladores carmen vargas_metacompiladordescompilador
Tarea de compiladores carmen vargas_metacompiladordescompiladorTarea de compiladores carmen vargas_metacompiladordescompilador
Tarea de compiladores carmen vargas_metacompiladordescompiladorMARCO POLO SILVA SEGOVIA
 
Introduccion a visual studio.Net Part 2
Introduccion a visual studio.Net Part 2Introduccion a visual studio.Net Part 2
Introduccion a visual studio.Net Part 2Marvin Romero
 
Repuesto de expo de programacion
Repuesto de expo de programacionRepuesto de expo de programacion
Repuesto de expo de programacionelizabethrmlm
 
1.5 GENERADORES DE CODIGO PARA COMPILADORES (COMPILADOR DE COMPILADORES)
1.5  GENERADORES  DE CODIGO  PARA COMPILADORES (COMPILADOR DE COMPILADORES)1.5  GENERADORES  DE CODIGO  PARA COMPILADORES (COMPILADOR DE COMPILADORES)
1.5 GENERADORES DE CODIGO PARA COMPILADORES (COMPILADOR DE COMPILADORES)elizabethrmlm
 
Trabajo flex byson
Trabajo flex bysonTrabajo flex byson
Trabajo flex bysonJhon Alexito
 
Reseña historica introd. a la programación
Reseña historica introd. a la programaciónReseña historica introd. a la programación
Reseña historica introd. a la programaciónJohnny Montenegro Molina
 
Procesadores de Lenguajes
Procesadores de LenguajesProcesadores de Lenguajes
Procesadores de LenguajesGLORIABELEN3
 
Tutorial Flex y Bison
Tutorial Flex y BisonTutorial Flex y Bison
Tutorial Flex y BisonShirlid .n
 

Similar a Introducción a compiladores en (20)

Grupo 1 proceso de lenguajes i
Grupo 1 proceso de lenguajes iGrupo 1 proceso de lenguajes i
Grupo 1 proceso de lenguajes i
 
Compiladores conceptos
Compiladores conceptosCompiladores conceptos
Compiladores conceptos
 
Repuesto de expo_de_programacion
Repuesto de expo_de_programacionRepuesto de expo_de_programacion
Repuesto de expo_de_programacion
 
Materia unidad compiladores
Materia unidad compiladoresMateria unidad compiladores
Materia unidad compiladores
 
Tarea de compiladores carmen vargas_metacompiladordescompilador
Tarea de compiladores carmen vargas_metacompiladordescompiladorTarea de compiladores carmen vargas_metacompiladordescompilador
Tarea de compiladores carmen vargas_metacompiladordescompilador
 
ingenieria de software
ingenieria de softwareingenieria de software
ingenieria de software
 
Introduccion a visual studio.Net Part 2
Introduccion a visual studio.Net Part 2Introduccion a visual studio.Net Part 2
Introduccion a visual studio.Net Part 2
 
Repuesto de expo de programacion
Repuesto de expo de programacionRepuesto de expo de programacion
Repuesto de expo de programacion
 
1.5 GENERADORES DE CODIGO PARA COMPILADORES (COMPILADOR DE COMPILADORES)
1.5  GENERADORES  DE CODIGO  PARA COMPILADORES (COMPILADOR DE COMPILADORES)1.5  GENERADORES  DE CODIGO  PARA COMPILADORES (COMPILADOR DE COMPILADORES)
1.5 GENERADORES DE CODIGO PARA COMPILADORES (COMPILADOR DE COMPILADORES)
 
Compiladores
CompiladoresCompiladores
Compiladores
 
Traductores de lenguajes
Traductores   de    lenguajesTraductores   de    lenguajes
Traductores de lenguajes
 
Traductores de lenguajes
Traductores   de    lenguajesTraductores   de    lenguajes
Traductores de lenguajes
 
Introduccion
IntroduccionIntroduccion
Introduccion
 
Flex y bison
Flex y bisonFlex y bison
Flex y bison
 
Trabajo flex byson
Trabajo flex bysonTrabajo flex byson
Trabajo flex byson
 
Reseña historica introd. a la programación
Reseña historica introd. a la programaciónReseña historica introd. a la programación
Reseña historica introd. a la programación
 
Compiladores
CompiladoresCompiladores
Compiladores
 
Procesadores de Lenguajes
Procesadores de LenguajesProcesadores de Lenguajes
Procesadores de Lenguajes
 
Programación java 1
Programación java 1Programación java 1
Programación java 1
 
Tutorial Flex y Bison
Tutorial Flex y BisonTutorial Flex y Bison
Tutorial Flex y Bison
 

Introducción a compiladores en

  • 1. UNIVERSIDAD NACIONAL DE EDUCACIÓN A DISTANCIA Escuela Técnica Superior de Ingeniería Informática Procesadores de Lenguajes Tema 1 Introducción Javier Vélez Reyes jvelez@lsi.uned.es Javier Vélez Reyes jvelez@lsi.uned.es Objetivos del Tema Aprender qué es un compilador Conocer los tipos de compiladores que existen Conocer la diferencia entre compilador e interprete Familiarizarse con el contexto de un compilador Aprender la estructura y fases de un compilador
  • 2. Javier Vélez Reyes jvelez@lsi.uned.es Índice General ¿Qué es un compilador? Compiladores e interpretes Contexto de un compilador Tipos de compiladores Estructura de un compilador Javier Vélez Reyes jvelez@lsi.uned.es ¿Qué es un compilador? Traductor Lenguaje Lenguaje Traductor objeto fuente Alto Nivel Traductor Lenguaje objeto Bajo Nivel Compilador Un compilador es un programa que lee un programa Un compilador es un programa que lee un programa escrito en lenguaje fuente lo traduce a un lenguaje escrito en lenguaje fuente,,yylo traduce a un lenguaje objetode bajo nivel. Además generará una lista de los objeto de bajo nivel. Además generará una lista de los posibles errores que tenga el programa fuente posibles errores que tenga el programa fuente
  • 3. Javier Vélez Reyes jvelez@lsi.uned.es Índice General ¿Qué es un compilador? Compiladores e interpretes Contexto de un compilador Tipos de compiladores Estructura de un compilador Javier Vélez Reyes jvelez@lsi.uned.es Compiladores e interpretes Compiladores Una única compilación Mayor velocidad ejecución Mayor detalle de errores Mayor consumo de memoria Interpretes Interpretación en ejecución Menor velocidad ejecución Menor detalle de errores Menor consumo de memoria
  • 4. Javier Vélez Reyes jvelez@lsi.uned.es Índice General ¿Qué es un compilador? Compiladores e interpretes Contexto de un compilador Tipos de compiladores Estructura de un compilador Javier Vélez Reyes jvelez@lsi.uned.es Contexto de un compilador .C .H Contexto .C .H Precompilador Precompilador Precompilador Compilador Enlazador (montador) .C .C .ASM .ASM Depurador Ensamblador Compilador Compilador Ensamblador Ensamblador .DLL .OBJ .OBJ .OBJ .OBJ .OBJ .OBJ .DLL WIN.EXE .LIB .LIB Enlazador Enlazador WIN.EXE .EXE .EXE Ensamblador Ensamblador .ASM .ASM .EXE .EXE
  • 5. Javier Vélez Reyes jvelez@lsi.uned.es Índice General ¿Qué es un compilador? Compiladores e interpretes Contexto de un compilador Tipos de compiladores Estructura de un compilador Javier Vélez Reyes jvelez@lsi.uned.es Tipos de compiladores Tipos de compiladores Ensamblador Compilador cruzado Compilador con montador Autocompilador Metacompilador Descompilador
  • 6. Javier Vélez Reyes jvelez@lsi.uned.es Índice General ¿Qué es un compilador? Compiladores e interpretes Contexto de un compilador Tipos de compiladores Estructura de un compilador Javier Vélez Reyes jvelez@lsi.uned.es Estructura de un compilador Análisis Léxico Análisis Léxico Independencia física Análisis Sintáctico Análisis Sintáctico Análisis Semántico Análisis Semántico Tabla de Generación de código Generación de código Gestión de símbolos intermedio intermedio errores Optimización de código Optimización de código intermedio intermedio Generación de código Generación de código Dependencia objeto objeto física
  • 7. Javier Vélez Reyes jvelez@lsi.uned.es Análisis léxico I Tipos de tokens El analizador léxico o scanner, transforma El analizador léxico o scanner, transforma el texto fuente en una secuencia a el texto fuente en una secuencia a Específicos ordenada de elemento léxicamente ordenada de elemento léxicamente Palabras reservadas válidos (tokens) válidos (tokens) Separadores Operadores e No específicos l Identificadores i h Constantes w Etiquetas G. Errores G. Errores Estructura Tabla Símbolos Tabla Símbolos Análisis Léxico (G3) Análisis Léxico (G3) Tipo Lexema [RESERVEDWORD, WHILE] Javier Vélez Reyes jvelez@lsi.uned.es Análisis léxico II Tipos de tokens El analizador léxico o scanner, transforma El analizador léxico o scanner, transforma el texto fuente en una secuencia a el texto fuente en una secuencia a Específicos ordenada de elemento léxicamente ordenada de elemento léxicamente Palabras reservadas válidos (tokens) válidos (tokens) Separadores Operadores No específicos e Identificadores l i Constantes G. Errores w Etiquetas G. Errores Error 1 Estructura Tabla Símbolos Tabla Símbolos Análisis Léxico (G3) Análisis Léxico (G3) Tipo Lexema 1 Los errores léxicos son difíciles de detectar y suelen delegarse en el análisis sintáctico
  • 8. Javier Vélez Reyes jvelez@lsi.uned.es Análisis léxico III Tipos de tokens El analizador léxico o scanner, transforma El analizador léxico o scanner, transforma el texto fuente en una secuencia a el texto fuente en una secuencia a Específicos ordenada de elemento léxicamente ordenada de elemento léxicamente Palabras reservadas válidos (tokens) válidos (tokens) Separadores Operadores No específicos d Identificadores a d Constantes G. Errores e Etiquetas G. Errores Estructura Tabla Símbolos Tabla Símbolos ID Análisis Léxico (G3) Análisis Léxico (G3) Tipo Lexema [ID, “edad”] Javier Vélez Reyes jvelez@lsi.uned.es Análisis sintáctico I Definición El analizador sintáctico o parser recibe los tokens El analizador sintáctico o parser recibe los tokens yycomprueba su ordenación correcta. Genera un comprueba su ordenación correcta. Genera un árbol sintáctico árbolsintáctico Funciones A := B + C Guiar la traducción Gestión de errores prelación de operadores Análisis Sintáctico (G2) Análisis Sintáctico (G2) A/B*C = A/(B*C) A/B*C = (A/B) * C := A + B C
  • 9. Javier Vélez Reyes jvelez@lsi.uned.es Análisis sintáctico II Definición El analizador sintáctico o parser recibe los tokens El analizador sintáctico o parser recibe los tokens yycomprueba su ordenación correcta. Genera un comprueba su ordenación correcta. Genera un árbol sintáctico árbolsintáctico Funciones Guiar la traducción Gestión de errores prelación de operadores A/B*C = A/(B*C) A B := + C A/B*C = (A/B) * C G. Errores G. Errores Análisis Sintáctico (G2) Análisis Sintáctico (G2) Javier Vélez Reyes jvelez@lsi.uned.es Análisis semántico I Definición El analizador semántico comprueba que el árbol El analizador semántico comprueba que el árbol sintáctico es semánticamente válido. Genera un sintáctico es semánticamente válido. Genera un árbol semántico o etiquetado árbol semántico o etiquetado := Validación A + Tipo de resultados intermedios Conversiones implícitas de tipos B C Sobrecarga de operadores Análisis Sintáctico (G2 + Reglas) Análisis Sintáctico (G2 + Reglas) Tipo A, B, C? := Tabla Símbolos Tabla Símbolos A + Real B C integer Real
  • 10. Javier Vélez Reyes jvelez@lsi.uned.es Análisis semántico I Definición El analizador semántico comprueba que el árbol El analizador semántico comprueba que el árbol sintáctico es semánticamente válido. Genera un sintáctico es semánticamente válido. Genera un árbol semántico o etiquetado árbol semántico o etiquetado := Validación A + Tipo de resultados intermedios Conversiones implícitas de tipos B C Sobrecarga de operadores Análisis Sintáctico (G2 + Reglas) Análisis Sintáctico (G2 + Reglas) Tipo A, B, C? := Tabla Símbolos Tabla Símbolos A + Real Error (B is Char) B C G. Errores G. Errores Char integer Javier Vélez Reyes jvelez@lsi.uned.es Generación de código intermedio Definición El generador de código intermedio transforma un árbol El generador de código intermedio transforma un árbol de semántico en una representación en un lenguaje de semántico en una representación en un lenguaje intermedio cercano al código objeto intermedio cercano al código objeto Lenguajes sencillos Tercetos Cuartetos L1: IF A>B GOTO L2 WHILE (A>B) AND (A<2*B-5) DO GOTO L3 A:=A+B L2: T1 := 2*B T2 := T1 – 5 IF A< T2 GOTO L4 Generación de Generación de GOTO L3 código intermedio códigointermedio L4: A := A + B GOTO L1 L3: …
  • 11. Javier Vélez Reyes jvelez@lsi.uned.es Optimización de código I Definición El optimizador de código realiza modificaciones El optimizador de código realiza modificaciones sobre el código intermedio para mejorar la sobre el código intermedio para mejorar la eficiencia en velocidad yytamaño. eficiencia en velocidad tamaño. Fases Independiente de la máquina Dependiente de la máquina Eliminación de saltos consecutivos L1: IF A>B GOTO L2 L1: IF A<=B GOTO L2 GOTO L3 T1 := 2*B L2: T1 := 2*B T2 := T1 – 5 T2 := T1 – 5 IF A>= T2 GOTO L2 IF A< T2 GOTO L4 Optimizador Optimizador A := A + B GOTO L3 GOTO L1 L4: A := A + B L2: … GOTO L1 L3: … Javier Vélez Reyes jvelez@lsi.uned.es Optimización de código II Definición El optimizador de código realiza modificaciones El optimizador de código realiza modificaciones sobre el código intermedio para mejorar la sobre el código intermedio para mejorar la eficiencia en velocidad yytamaño. eficiencia en velocidad tamaño. Fases Independiente de la máquina Dependiente de la máquina Factorización de expresiones comunes T1 := B + C A := B + C + D Optimizador Optimizador A := T1 + D E := B + C + F E := T1 + F
  • 12. Javier Vélez Reyes jvelez@lsi.uned.es Optimización de código III Definición El optimizador de código realiza modificaciones El optimizador de código realiza modificaciones sobre el código intermedio para mejorar la sobre el código intermedio para mejorar la eficiencia en velocidad yytamaño. eficiencia en velocidad tamaño. Fases Independiente de la máquina Dependiente de la máquina Extracción de invariantes REPEAT B := 1 B := 1 Optimizador Optimizador REPEAT A := A – B A := A – B UNTIL A = 0 UNTIL A = 0 Javier Vélez Reyes jvelez@lsi.uned.es Generación de código objeto Definición El generador de código objeto transforma el código El generador de código objeto transforma el código intermedio optimizado en código objeto de bajo intermedio optimizado en código objeto de bajo nivel nivel Lenguaje objeto LD AX, B LD BX, C Ensamblador ADD AX, BX Código máquina ST AX, A Generador de código Generador de código Generador de código Generador de código A := B + C intermedio objeto intermedio objeto
  • 13. Javier Vélez Reyes jvelez@lsi.uned.es La tabla de símbolos Almacena estructuras de datos Variables Constantes Etiquetas Tipos Valores Signatura de funciones Operaciones Insertar símbolo Consultar símbolo Borrar símbolo Javier Vélez Reyes jvelez@lsi.uned.es Gestión de errores Detección de errores Léxicos (se delegan al sintáctico) Sintácticos Semánticos Recuperación de errores Parar al primer error Recuperar volviendo a un contexto fiable
  • 14. Javier Vélez Reyes jvelez@lsi.uned.es Bibliografía [AJO] AHO, SETHI, ULLMAN: Compiladores: Principios, técnicas y herramientas,: Addison-Wesley Iberoamericana, 1990 [GARRIDO] A. Garrido, J. Iñesta, F. Moreno y J. Pérez. 2002. Diseño de compiladores. Universidad de Alicante.