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

Documentos relacionados