Tema 1: Introducción Procesamiento de Lenguajes Dept. de Lenguajes y Sistemas Informáticos Universidad de Alicante Procesamiento de Lenguajes Tema 1: Introducción 1 / 12 Definición de compilador Un compilador es un programa que traduce de un lenguaje fuente (normalmente un lenguaje de programación de alto nivel) a un lenguaje objeto (normalmente código máquina) IMPORTANTE: un compilador es un traductor Un IDE (Integrated Development Environment) no es un compilador, un IDE suele tener un buen editor, y llama al compilador y enlazador, y suele integrar un depurador. Procesamiento de Lenguajes Tema 1: Introducción 2 / 12
Tipos de procesadores de lenguaje LENGUAJE FUENTE LENGUAJE OBJETO traductor/conversor alto alto compilador alto bajo ensamblador medio/bajo bajo preprocesador alto alto intérprete alto medio (*) (*) la mayoría de los intérpretes actuales precompilan el programa fuente y generan un código intermedio Procesamiento de Lenguajes Tema 1: Introducción 3 / 12 Qué vamos a estudiar? Las técnicas y algoritmos que vamos a estudiar se aplican al diseño de compiladores, pero se pueden aplicar en otras tareas que requieran el procesamiento y/o traducción de lenguajes informáticos: Traductores automáticos de lenguajes humanos (ejemplo: internostrum, Apertium,...) Visores de PDF (evince, acroread,...) Navegadores web (Firefox, Chrome,...) Ficheros de configuración (.ini...)... Procesamiento de Lenguajes Tema 1: Introducción 4 / 12
Historia de los compiladores Los primeros compiladores eran humanos: http://eltamiz.com/elcedazo/2009/02/17/historia-de-un-viejo-informatico-elmetodo-de-trabajo-en-proceso-de-datos-en-la-decada-de-los-setenta/ Los primeros compiladores no humanos eran compiladores cruzados (cross-compilers): en una máquina se generaba código para ser ejecutado en otra máquina. Cuando se diseñaba una nueva arquitectura, lo primero que se hacía era diseñar un cross-compiler en una arquitectura conocida, para poder compilar el compilador nativo en la nueva arquitectura. Procesamiento de Lenguajes Tema 1: Introducción 5 / 12 Diseño de compiladores C C++ Pascal FORTRAN Cobol Ada 8086 RISC 68000 N lenguajes fuente M lenguajes objeto NxM compiladores Procesamiento de Lenguajes Tema 1: Introducción 6 / 12
intermedio FRONT END C C++ Pascal FORTRAN Cobol Ada Intermedio BACK END 8086 RISC 68000 N lenguajes fuente M lenguajes objeto N front end + M back end Procesamiento de Lenguajes Tema 1: Introducción 7 / 12 intermedio (mundo real) FRONT END C C++ Pascal FORTRAN Cobol Ada Intermedio 1 Intermedio 2 Intermedio 3 BACK END 8086 RISC 68000 Procesamiento de Lenguajes Tema 1: Introducción 8 / 12
Fases de un compilador Internamente, un compilador se organiza en varias fases o partes que interaccionan entre sí: 1 Análisis léxico 2 Análisis sintáctico 3 Análisis semántico 4 Gestión de errores 5 Tabla de símbolos 6 Generación de código intermedio 7 Optimización de código intermedio 8 Generación de código objeto 9 Optimización de código objeto Procesamiento de Lenguajes Tema 1: Introducción 9 / 12 Estructura estándar de un compilador Gestión errores Tab.Símbolos A. Semántico Programa fuente A. Léxico A. Sintáctico Generación Cód. Intermedio FRONT END Programa Cód.Intermedio Optimización Intermedio BACK END Generación Objeto Optimización Objeto Programa Cód. Objeto Procesamiento de Lenguajes Tema 1: Introducción 10 / 12
Cómo se especifica un traductor/compilador? Especificación léxica: expresiones regulares, AFD, diagramas de transiciones Especificación sintáctica: gramáticas independientes del contexto Especificación semántica: sistema de tipos, restricciones semánticas Especificación de la traducción: gramáticas de atributos, DDS, ETDS Procesamiento de Lenguajes Tema 1: Introducción 11 / 12 Ejemplo de traducción 2+35*4 suma(2,prod(35,4)) 2-3/(4+5*6) resta(2,div(3,suma(4,prod(5,6)))) 2-3+4 suma(resta(2,3),4) 2-3+4-5 resta(suma(resta(2,3),4),5) Hay dos formas de resolver este problema: 1 A mano (difícil) 2 Utilizando técnicas para el diseño de compiladores: análisis léxico, análisis sintáctico, traducción dirigida por la sintaxis (chupao) Procesamiento de Lenguajes Tema 1: Introducción 12 / 12