Introducción y Perspectivas El Escenario
Transcripción
Introducción y Perspectivas El Escenario
Introducción y Perspectivas ¿Qué?, ¿Por qué?, ¿Cómo? Y ¿Para qué? De los Procesadores de Lenguajes en General y de los Compiladores en particular El Escenario ... Enorme desarrollo de los métodos de diseño de compiladores n n Años 80 y 90, mientras todos hablan de PCs e Internet ... Gran cantidad de publicaciones y, sobre todo, mejoras constantes de los compiladores que procesan el software que empleamos Lenguajes de Programación en constante evolución: n © Valentín Cardeñoso Payo. Departamento de Informática UNIVERSIDAD DE VALLADOLID n n Nuevos paradigmas: OO, funcional, lógico, paralelo-distribuído Se precisan nuevas técnicas de compilación Se requieren entornos de ejecución mucho más extensos Las técnicas de generación de código han evolucionado n n Sistemas de reescritura ascendente (BURS) Capaces de vérselas con juegos de instrucciones complejos Computadoras más potentes à Técnicas de compilación nuevas octubre de 2003 PROCESADORES DE LENGUAJES T1: Introducción 2 1 La audiencia ... Estudiantes de Informática de últimos años de carrera: n n n Usuarios, ya habituales, de compiladores Con inquietud por saber cómo funciona uno de estos sistemas Con grado de madurez suficiente en estructuras, algoritmos y programación Gente que quiere ... © Valentín Cardeñoso Payo. Departamento de Informática UNIVERSIDAD DE VALLADOLID n n n Comprender en profundidad los conceptos Conocer los métodos de diseño moderno de compiladores Ser capaz de emplear herramientas para construir compiladores n n n Para diferentes paradigmas Con períodos de aprendizaje adicionales Leer y entender la literatura especializada sobre el tema octubre de 2003 PROCESADORES DE LENGUAJES T1: Introducción 3 Compiladores: Qué son Compilador: Programa que acepta como entrada un texto de programa en un cierto lenguaje y genera como salida texto de programa en otro lenguaje. Traducción: Proceso por el cual un compilador convierte el texto del programa de entrada en el de salida. Terminología: © Valentín Cardeñoso Payo. Departamento de Informática UNIVERSIDAD DE VALLADOLID n n Lenguaje fuente: lenguaje en que se escribe la entrada Lenguaje objeto: lenguaje en que se escribe la salida n En general, muy diferente del lenguaje fuente Objetivo de la traducción: n Conseguir que el hardware realice las acciones descritas en la semántica del programa n La ejecución del programa traducido supondrá tomar datos de diversas fuentes y volcarlos en otras después de procesarlos El programa en lenguaje objeto se convertirá en ejecutable: n Cargador (RUNNER) con/sin caparazón (Shell) octubre de 2003 PROCESADORES DE LENGUAJES T1: Introducción 4 2 Compiladores: Proceso de construcción ¡¡El compilador se obtiene usando otro compilador!! n “El huevo o la gallina” Tres lenguajes: n n n Lenguaje fuente Lenguaje objeto Lenguaje de implementación del compilador © Valentín Cardeñoso Payo. Departamento de Informática UNIVERSIDAD DE VALLADOLID Bootstrapping: n n Lenguaje fuente = Lenguaje de implementación Texto de entrada = Nueva versión del compilador Texto fuente Compilador Texto ejecutable Lenguaje de implementación octubre de 2003 PROCESADORES DE LENGUAJES T1: Introducción 5 Compilación y conversión Compilar <~> Convertir de un formato a otro n n © Valentín Cardeñoso Payo. Departamento de Informática UNIVERSIDAD DE VALLADOLID n Mantener el significado en la conversión La entrada está escrita en un lenguaje => Tiene estructura Semántica asociada y descrita en términos de estructura El compilador ‘comprende’ el programa y recolecta su significado en una representación semántica intermedia. A la hora de generar la salida, también se trata la estructura y el significado Dos zonas del compilador: n n n front-end: Parte que se encarga del análisis del texto de entrada. back-end: Parte que se encarga de la síntesis del texto de salida. En un diseño nítido, ambas zonas sólo tienen como zona de contacto la representación semántica n En general, esto no es muy eficiente. Modo de operación posible: intérprete. n En vez de traducir, realiza las acciones directamente octubre de 2003 PROCESADORES DE LENGUAJES T1: Introducción 6 3 Esctructura conceptual del compilador © Valentín Cardeñoso Payo. Departamento de Informática UNIVERSIDAD DE VALLADOLID Texto fuente Texto ejecutable Front-end (Análisis) Representación semántica Back-end (Síntesis) Compilador octubre de 2003 PROCESADORES DE LENGUAJES T1: Introducción 7 Intérpretes: por qué Portabilidad: n Un intérprete se escribe en lenguaje de alto nivel. Sencillez: n Escribir un intérprete cuesta menos que construir un back-end Señalización y Manejo de errores: n Los compiladores suelen cuidar ‘demasiado’ la eficiencia de código © Valentín Cardeñoso Payo. Departamento de Informática UNIVERSIDAD DE VALLADOLID Seguridad: n Funcionamiento más transparente al usuario Comparativa: n n Conceptualmente, casos de traductores. Difieren básicamente en la proporción preproceso/proceso n Preproceso: del fuente al objeto n Proceso: Interpretación por la máquina virtual ó intérprete octubre de 2003 PROCESADORES DE LENGUAJES T1: Introducción 8 4 Compiladores vs. Intérpretes Compiladores: n n n n El procesamiento del programa es considerable. La forma intermedia resultante es, generalmente, código ejecutable binario (bajo nivel de abstracción). El mecanismo de interpretación previsto es la CPU hw. La ejecución del programa traducido es relativamente rápida. © Valentín Cardeñoso Payo. Departamento de Informática UNIVERSIDAD DE VALLADOLID Intérpretes: n n n n El procesamiento de programa es entre mínimo y moderado. El lenguaje resultante (estructura de datos dependiente de sistema) tiene nivel de abstracción entre medio y alto. El mecanismo de interpretación es un programa (sw). La ejecución del programa es, en general, más lenta y más segura. octubre de 2003 PROCESADORES DE LENGUAJES T1: Introducción 9 ¿Por qué estudiar los compiladores? La construcción de compiladores es: n n n Actividad muy fructífera y con muchos éxitos en computación. Una de las primeras en ganarse fama. Supone: n n © Valentín Cardeñoso Payo. Departamento de Informática UNIVERSIDAD DE VALLADOLID n Estructuración adecuada del problema (L front-ends , M back-ends ). Uso juicioso de formalismos (algunos con más de 40 años de uso). Empleo de herramientas de generación de programas. Conceptos, técnicas y herramientas útiles: n n n n Búsqueda / Sustitución Diseño de partes del interfaz de usuario (CLI) Filtros y convertidores: Web, TextProc, ... Procesamiento de Lenguaje Natural (siempre emergente) Varios algoritmos interesantes ES FASCINANTE saber cómo consiguen los compiladores hacer lo que hacen y puede ayudarnos a programar octubre de 2003 PROCESADORES DE LENGUAJES T1: Introducción 10 5 Estructura de un compilador real: Front-End Módulo de entrada de texto n Lectura eficiente de la entrada y conversión a flujo de caracteres Módulo de análisis léxico n Segmentación y etiquetado del flujo de caracteres: tokens Módulo de análisis sintáctico © Valentín Cardeñoso Payo. Departamento de Informática UNIVERSIDAD DE VALLADOLID n Conversión del flujo de tokens en representación abstracta de la estructura de programa (e.g. AST). Módulo de gestión de contexto n Anotación de la estructura con información de contexto global Módulo de generación de código intermedio n Traducción de construcciones específicas del lenguaje a construcciones más generales (IC) n Facilitar la generación directa de código máquina octubre de 2003 PROCESADORES DE LENGUAJES T1: Introducción 11 Estructura de un compilador real: Back-End Módulo de optimización de código intermedio n Limpieza y reorganización de código intermedio Módulo de generación de código n Reescritura del AST en lista lineal de instrucciones máquina Optimización de código objeto n Reescritura de la lista lineal de instrucciones © Valentín Cardeñoso Payo. Departamento de Informática UNIVERSIDAD DE VALLADOLID n Sustitución, inserción, relocalización o borrado de subsecuencias . Generación de Código máquina n Conversión de la lista simbólica de instrucciones en secuencias de patrones de bits. Módulo de salida de código ejecutable n Combinación y escritura de: n Instrucciones máquina codificadas Tablas de constantes y de recolocación de código. n Cabeceras, colas y otro material diverso requerido por el S.O. n n Fuertemente dependiente del sistema de ejecución (RTS) octubre de 2003 PROCESADORES DE LENGUAJES T1: Introducción 12 6 Arquitecturas de compiladores Sistemas modulares n Cada par de módulos consecutivo define un interfaz. Compilador estrecho: n Lectura de pequeñas porciones del programa y procesamiento completo de ellas. Compilador ancho: © Valentín Cardeñoso Payo. Departamento de Informática UNIVERSIDAD DE VALLADOLID n Lectura de grandes porciones (incluso toda la entrada) antes de comenzar a generar salida alguna. Fases de compilación: n Cada una de las transformaciones mayores que realiza. Pasos de compilación: n Cada uno de las etapas que integran un compilador estrecho y que se comunica con la siguiente por medio de almacenamiento externo. octubre de 2003 PROCESADORES DE LENGUAJES T1: Introducción 13 Propiedades de un buen compilador Generación de código correcto. © Valentín Cardeñoso Payo. Departamento de Informática UNIVERSIDAD DE VALLADOLID n Siempre: compilador inservible. A veces: compilador peligroso. Ajuste a las especificaciones del lenguaje fuente. Capacidad para manejar entradas de tamaño o complejidad arbitrariamente grande. Velocidad de compilación tolerable (~). Tamaño del programa de compilación (~). Capacidad informativa al usuario sobre errores de la entrada. Portabilidad Versatilidad para cambio de lenguaje objeto (retargetability). octubre de 2003 PROCESADORES DE LENGUAJES T1: Introducción 14 7 Compiladores: Historia rápida 1945-1960: GENERACIÓN DE CÓDIGO n Dependencia de las máquinas 1960-1975: PARSING n Buenos formalismos y técnicas de análisis. 1975-hoy: GENERACIÓN Y OPTIMIZACIÓN, NUEVOS PARADIGMAS. © Valentín Cardeñoso Payo. Departamento de Informática UNIVERSIDAD DE VALLADOLID n n Adecuación a nuevas necesidades, paradigmas y entornos. Mejora del rendimiento, la seguridad y la tolerancia a fallos. octubre de 2003 PROCESADORES DE LENGUAJES T1: Introducción 15 Algunas actividades ... (para el cuaderno) Buscar: n n © Valentín Cardeñoso Payo. Departamento de Informática UNIVERSIDAD DE VALLADOLID n n ¿Cuántos lenguajes de programación hay? ¿Alguna explicación? ¿Qué lenguaje de programación emplea el gestor de arranque y configuración de las plataformas Sun? ¿Es interpretado? ¿Qué tiene de interesante? Referencias sobre evolución histórica de compiladores/interp. Y su correspondencia tanto con la de los lenguajes de programación como con la de las arquitecturas. ¿Cómo hemos llegado a Python desde awk y C pasando por Perl? Análisis: n n Describir la estructura y funcionamiento (fases y pasos) del compilador de C++ de GNU. Las primeras versiones de Perl se desarrollaron bajo el modelo de intérprete puro pero las actuales adoptan un modelo mixto compilado/interpretado: ¿En qué consiste la ‘compilación’ de código Perl de biblioteca o de módulos de usuario? ¿Tiene algo que ver con la salvaguarda/recuperación del estado? octubre de 2003 PROCESADORES DE LENGUAJES T1: Introducción 16 8