Story Transcript
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
L ENGUAJE FUENTE L ENGUAJE 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: I I I I I
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
8086
C++
RISC
Pascal
68000
FORTRAN
...
Cobol
...
Ada
...
...
... N lenguajes fuente M lenguajes objeto NxM compiladores
Procesamiento de Lenguajes
Tema 1: Introducción
6 / 12
Código intermedio FRONT END
BACK END
C
8086
C++
RISC
Pascal FORTRAN
68000
Código Intermedio
...
Cobol
...
Ada
...
...
... N lenguajes fuente M lenguajes objeto N front end + M back end
Procesamiento de Lenguajes
Tema 1: Introducción
7 / 12
Código intermedio (mundo real) FRONT END
BACK END
C
8086
C++
Código Intermedio 1
RISC
Pascal
Código Intermedio 2
68000
FORTRAN Cobol Ada
Código Intermedio 3 ...
...
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 2 3 4 5 6 7 8 9
Análisis léxico Análisis sintáctico Análisis semántico Gestión de errores Tabla de símbolos Generación de código intermedio Optimización de código intermedio Generación de código objeto 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 Código Intermedio
Generación Código Objeto BACK END Optimización Código 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 2-3/(4+5*6) 2-3+4 2-3+4-5
suma(2,prod(35,4)) resta(2,div(3,suma(4,prod(5,6)))) suma(resta(2,3),4) 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