Proceso de traducción que convierte un programa
fuente escrito en un lenguaje de alto nivel a un
programa objeto en código máquina y listo por
tanto para ejecutarse en el ordenador, con poca o
ninguna preparación adicional
En los 50 los compiladores eran considerados
programas muy difíciles
FORTRAN se desarrolló en grupo durante 18 años
Se han desarrollado técnicas sistemáticas, entornos de
programación y herramientas software que facilitan la
tarea de desarrollo
Gran variedad de lenguajes de alto nivel.
Gran variedad de lenguajes objeto, tanto otro lenguaje de alto nivel como código máquina
Los primeros traducían fórmulas aritméticas a código
máquina
Varios grupos independientemente desarrollaron
técnicas de análisis
No puede darse una fecha exacta del primer
desarrollo
Para ser buen programador
--Saber como se obtiene un ejecutable permite saber más sobre corrección y eficiencia
Para entender más sobre lenguajes
--Tipificación: estática, dinámica, fuerte, polimorfismo,
conversiones, sobrecarga de operadores...
--Estructura de bloques, ámbitos
Paso de parámetros
--Gestión de memoria, punteros
Slide 7
La teoría es imprescindible
Antes de la aplicación de teoría de autómatas y
lenguajes formales, programación, etc. Los
compiladores eran muy malos
Aplicar la teoría y herramientas a otros campos:
Intérpretes de comandos y consultas
Formateadores de texto (TeX, LaTeX)
Lenguajes de simulación (GPSS)
Intérpretes Gráficos (PS, GIF, JPEG, PovRAY)
Motivación (II)
Slide 8
Ensamblador:
Compilador sencillo, el lenguaje fuente tiene una estructura
simple que permite una traducción de una sentencia fuente
a una instrucción en código máquina
Compilador cruzado:
Compilador que traduce un lenguaje fuente a objeto, el
objeto es para un ordenador distinto del que compila
Compilador; Definiciones I
Slide 9
Compilador; Definiciones II
Compile-Link-Go frente a Compile-Go:
Lenguaje que permita la fragmentación, compilación
separada y enlazado de las parte
El compilador deja en memoria directamente un módulo
cargable que se ejecuta a continuación
Compilador de una o varias pasadas:
“Pasada”: recorrido total de todo el fuente con alguna
misión específica
Slide 10
Compilador; Definiciones III
Traductor o compilador incremental (interactivo o
conversacional)
Encontrados y corregidos los errores después solo se
compilan estos
Autocompilador
Compilador escrito en el propio lenguaje que compila
Facilitar la portabilidad
Slide 11
Compilador; Definiciones IV
Metacompilador
Programa que recibe un lenguaje y genera un compilador
para ese lenguaje
Decompilador
Programa que recibe como entrada código máquina y lo
traduce a un lenguaje de alto nivel
Análisis Lineal: La cadena de entrada se lee de
izquierda a derecha y se agrupa en componentes
léxicos (tokens)
Secuencias de caracteres con un significado colectivo
Agrupación lógica de un compilador
Etapa Inicial
Fases, o parte de fases que dependen del lenguaje fuente y
que son independientes de la máquina
Análisis léxico, sintáctico, semántico y generación de código
intermedio, manejo de errores de cada parte
Etapa Final
Fases que depende de la máquina, depende del lenguaje
intermedio
Optimización de código, generación de código, operaciones con
la tabla de símbolos