imprimir (2 p g/hoja)

Anuncio
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
Descargar