Está en la página 1de 17

Procesadores de Lenguaje 1

Introduccin

Compilador: DEFINICIN
Proceso de traduccin que convierte un
programa fuente escrito en un lenguaje
de alto nivel a un programa objeto en
cdigo mquina y listo por tanto para
ejecutarse en el ordenador, con poca o
ninguna preparacin adicional
Programa
Fuente

Compilador

Programa
Objeto

Mensajes
de Error

Compiladores, Introduccin
Cdigo
Mquina

Ensamblador
Cdigo
Mquina

Lenguaje
Ensamblador

Ensamblador
Compilador
Cdigo
Lenguaje
Lenguaje
Mquina
Ensamblador
de alto Nivel

Compiladores

En los 50los compiladores eran


considerados programas muy difciles
FORTRAN se desarroll en grupo durante
18 aos
Se han desarrollado tcnicas sistemticas,
entornos de programacin y herramientas
software que facilitan la tarea de desarrollo

Compiladores

Gran variedad de lenguajes de alto nivel


Gran variedad de lenguajes objeto, tanto otro
lenguaje de alto nivel como cdigo mquina
No puede darse una fecha exacta del primer
desarrollo
Varios grupos independientemente desarrollaron
tcnicas de anlisis
Los primeros traducan frmulas aritmticas a
cdigo mquina

Conceptos Relacionados
Arquitectura
de Ordenadores

Teora de
Lenguajes

Lenguajes de
Programacin

Compiladores

Teora de
Algoritmos

Ingeniera
del Software

Motivacin (I)
Para ser buen programador

Saber como se obtiene un ejecutable permite


saber ms sobre correccin y eficiencia

Para entender ms sobre lenguajes

Tipificacin: esttica, dinmica, fuerte,


polimorfismo, conversiones, sobrecarga de
operadores...
Estructura de bloques, mbitos
Paso de parmetros
Gestin de memoria, punteros

Motivacin (II)
La teora es imprescindible

Antes de la aplicacin de teora de autmatas


y lenguajes formales, programacin, etc. Los
compiladores eran muy malos

Aplicar la teora y herramientas a otros


campos:

Intrpretes de comandos y consultas


Formateadores de texto (TeX, LaTeX)
Lenguajes de simulacin (GPSS)
Intrpretes Grficos (PS, GIF, JPEG, PovRAY)

Compilador; Definiciones I

Ensamblador:
Compilador sencillo, el lenguaje fuente tiene
una estructura simple que permite una
traduccin de una sentencia fuente a una
instruccin en cdigo mquina

Compilador cruzado:
Compilador que traduce un lenguaje fuente a
objeto, el objeto es para un ordenador distinto
del que compila

Compilador; Definiciones II

Compile-Link-Go frente a Compile-Go:


Lenguaje que permita la fragmentacin,
compilacin separada y enlazado de las parte
El compilador deja en memoria directamente
un mdulo cargable que se ejecuta a
continuacin

Compilador de una o varias pasadas:


Pasada: recorrido total de todo el fuente con
alguna misin especfica

Compilador; Definiciones III

Traductor o compilador incremental


(interactivo o conversacional)
Encontrados y corregidos los errores despus
solo se compilan estos

Autocompilador
Compilador escrito en el propio lenguaje que
compila
Facilitar la portabilidad

Compilador; Definiciones IV

Metacompilador
Programa que recibe un lenguaje y genera un
compilador para ese lenguaje

Decompilador
Programa que recibe como entrada cdigo
mquina y lo traduce a un lenguaje de alto
nivel

Esquema de Compilacin

Ejecucin

Compilacin

Fuente

Compilador
Corregir
Errores del
Fuente

Listado
Diagnsticos

Objeto

No

Bien
Si
Programa
Objeto

Resultados

Datos

Compilador, Esquema
Estructura de
Programa Fuente

Cdigo Mquina
Absoluto
Biblioteca de
Archivos Objeto
Relocalizables

Preprocesador

Compilador

Programa
Fuente

Ensamblador

Programa
Objeto
Ensamblador

Editor de
Carga

Cdigo Mquina
Relocalizable

Fases de un Compilador
Tabla de
Smbolos

Generacin

Anlisis
Analizador
Lxico

Analizador
Sintctico

Analizador
Semntico

Entrada
Salida

Generador
de Cdigo
Intermedio

Optimizador

Generador
de Cdigo

Tratamiento
de errores

Front End

Backend

Analizador Lxico (scanner)

Anlisis Lineal: La cadena de entrada se


lee de izquierda a derecha y se agrupa en
componentes lxicos (tokens)
Secuencias de caracteres con un significado
colectivo
TOKENS

x:=a+b*c;
y:=3+b*c;

Analizador
Lxico

(id,x) (op,:=)

(id,a)

(op,+) (id,b)

(op,*)

(id,c) (punt,;)
(id,y) (op,:=)

(num,3)

(op,+) (id,b)

(op,*)

(id,c) (punt,;)

Analizador Sintctico

Anlisis Jerrquico
Agrupa los componentes lxicos en frases
gramaticales que el compilador utiliza
TOKENS

(id,x) (op,:=)

(id,a)

(op,+) (id,b)

(op,*)

Analizador
Sintctico

(id,c) (punt,;)
(id,y) (op,:=)

(num,3)

(op,+) (id,b)

(op,*)

(id,c) (punt,;)

Sentencias
Sentencia

Sentencias

Asignacin

X
a

Variable

:=

Variable

Variable
b

Sentencia
Expresin

Asignacin

Expresin

Variable

Expresin

Variable

3
c

:=

Constante
Variable

Expresin
+

Expresin

Expresin

Variable
c

Compilador; Gramtica
Sentencias ::= Sentencia ; Sentencias | Sentencia
Sentencia ::= Asignacin | Condicional | Iterativa
Asignacin ::= Variable := Expresin
Condicional ::= if Condicin then Sentencias else
Sentencias
Iterativa ::= while Condicin do Sentencias
Expresin ::= Variable-Nmero + Expresin |
Variable-Nmero * Expresin |
Variable-Nmero - Expresin |
Variable-Nmero / Expresin |
Variable-Nmero
Variable ::= [A-Za-z] [A-Za-z0-9]*
Variable-Nmero ::= Variable | Nmero
Nmero ::= [0-9]+

Analizador Semntico

Busca errores semnticos, rene


informacin de tipos; identifica operadores
y operandos

:=
x

:=
+

y
*

+
3

*
b

10

Optimizacin

:=
x

:=
+

*
b

+
3

Generador de Cdigo

:=
x

:=
+

y
*

+
3

Push a

apila

Push b

bpila

Load (c), R1

cR1

Mult (S), R1

b*cR1

Store R1, R2

R1R2

Add (S), R1

a+b*cR1

Store R1,(x)

R1x

Add #3, R2

3+b*cR2

Store R2, (y) R2y

11

Generacin de cdigo
El uso de cdigo intermedio reduce la
complejidad del desarrollo de
compiladores

m front ends y n backends comparten un


cdigo intermedio comn
1

1
CI

2
Front Ends

2
n

Backends

Fases de un Compilador
Agrupacin lgica de un compilador

Etapa Inicial
Fases, o parte de fases que dependen del
lenguaje fuente y que son independientes de la
mquina

Anlisis lxico, sintctico, semntico y generacin de


cdigo intermedio, manejo de errores de cada parte

Etapa Final
Fases que depende de la mquina, depende del
lenguaje intermedio

Optimizacin de cdigo, generacin de cdigo,


operaciones con la tabla de smbolos

12

Aplicaciones
Desarrollo de interfaces de texto
Tratamiento de ficheros de texto estructurados

Perl, Tcl, comando de Unix (egrep)

Procesadores de texto

vi,emacs

Formateo de texto y descripcin grfica

HTML, TeX, Postscript

Gestin de bases de datos


Procesamiento del Lenguaje Natural
Traduccin de formatos de programas
Clculo simblico
Reconocimiento de formas

Diagramas de Tombstone
Conjunto de piezas de puzzle tiles
para razonar acerca de los
procesadores de lenguaje y los
programas

Tienen diferentes tipos de piezas


Hay reglas de formacin, no todos los
diagramas estn permitidos

13

Diagramas de Tombstone
Diagrama para Programas
P
L

Programa P
expresado en
el lenguaje L

HolaMundo
x86
sort
JAVA

Diagrama para Mquinas


M

Mquina M
capaz de ejecutar
programas en el
lenguaje M

x86
SPARC

Diagramas de Tombstone
Ejecucin de un programa en una
mquina
A

La mquina y el
lenguaje deben
coincidir

B
HolaMundo

HolaMundo

x86

x86

x86

SPARC

14

Diagramas de Tombstone
Diagrama para Traductores/Compiladores

Lenguaje
Objeto

Ada x86
C

Lenguaje
de Implementacin

Ada x86
x86

Lenguaje
Fuente

Diagrama para Intrpretes


S

Lenguaje
Fuente

Perl
Sparc

Lenguaje
de Implementacin

Diagramas de Tombstone
Ejemplo de compilacin
tetris
C

C x86
x86

tetris

tetris

x86

x86
x86

x86

Compilacin cruzada
tetris

tetris

tetris

PPC

PPC

C PPC
x86
x86

PCC

15

Diagramas de Tombstone
Intrprete

tetris
Basic
Basic
x86
x86

Mquinas abstractas

Doom

tetris

Atari

Emulador

Atari
C

Atari
x86

C x86
x86

Atari
x86

Doom
C Atari
x86
x86

Atari
x86
x86

x86

x86

Atari

Mquina Atari sobre x86

Diagramas de Tombstone
Compilar un compilador
Java x86
C

Java x86
C x86
x86

x86

x86

Para una mquina distinta (half bootstrap)


C PPC

C PPC

C PPC

C PPC

C x86
x86

x86

x86

PPC

x86

16

Bootstrapping
Compilar un compilador (una versin
antigua) consigo mismo

Vamos a obtener un nuevo compilador

Ada-s x86

Ada-s x86

Ada-s x86

C x86
x86

Ada-s x86
Ada-s Ada-s x86 x86
x86

x86

x86

x86
Ada x86

Ya no dependemos
de C!!!

Ada-s x86

Ada-s Ada-s x86

x86

x86
x86

Obtener un compilador rpido


Tenemos:

Ada x86s

Ada x86s

Ada

x86s

Hacemos:

Ada x86f

Ada x86f
Ada

Ada
Ada x86f

Ada x86s

x86s

Ada x86f
Ada

Ada x86f

Ada x86f

x86s

x86s

x86

x86

x86f

17

También podría gustarte