• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
Apuntes01
 

Apuntes01

on

  • 972 views

 

Statistics

Views

Total Views
972
Views on SlideShare
972
Embed Views
0

Actions

Likes
0
Downloads
17
Comments
0

0 Embeds 0

No embeds

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

    Apuntes01 Apuntes01 Document Transcript

    • 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.esJavier 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 compiladorJavier 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 compiladorJavier 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 compiladorJavier 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 compiladorJavier 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 compiladorJavier 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 integerJavier 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 = 0Javier 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ímboloJavier 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.