Sie sind auf Seite 1von 56

Diseo de Compiladores I

Estructura General de un Compilador

Estructura General de un Compilador

PROGRAMA FUENTE

COMPILADOR

SALIDA

Mensajes de Error

Diseo de Compiladores I - 2008

Estructura General de un Compilador 2

Un compilador es un programa que traduce un programa escrito en lenguaje fuente y produce otro equivalente escrito en un lenguaje destino.

Diseo de Compiladores I - 2008

Estructura General de un Compilador 3

Lenguaje Fuente
l

Lenguaje de alto nivel. Por ejemplo: C, Pascal, C++. Lenguaje especializado para alguna disciplina especfica dentro de las Ciencias de la Computacin.

Diseo de Compiladores I - 2008

Estructura General de un Compilador 4

Salida
l l

Cdigo Assembler. Deber ser ensamblado y vinculado. Cdigo Binario. Deber ser vinculado con las libreras correspondientes para obtener el cdigo ejecutable. Cdigo de Mquina. Escrito en las instrucciones de mquina de la computadora en la que se ejecutar. Otro lenguaje de alto nivel.
Estructura General de un Compilador 5

Diseo de Compiladores I - 2008

Fases de la Compilacin
Programa Fuente

Anlisis Lxico Anlisis Sintctico

Tabla de Smbolos

Anlisis Semntico

Errores
Generacin de Cdigo Intermedio Optimizacin Generacin de Cdigo Destino
Salida

Diseo de Compiladores I - 2008

Estructura General de un Compilador 6

Front End (Anlisis)


Fases que dependen del lenguaje fuente
l l l l l l l

Anlisis Lxico Anlisis Sintctico Anlisis Semntico (Esttico) Creacin de la Tabla de Smbolos Generacin de Cdigo Intermedio Algo de Optimizacin Manejo de errores correspondiente a las fases del Front End
Estructura General de un Compilador 7

Diseo de Compiladores I - 2008

Back End (Sntesis)


Fases que dependen de la mquina destino
l l l

Generacin de la salida Optimizacin Manejo de errores correspondiente a las fases del Back End Operaciones sobre la Tabla de Smbolos

Diseo de Compiladores I - 2008

Estructura General de un Compilador 8

Fases de la Compilacin
Programa Fuente

Anlisis Lxico Anlisis Sintctico

Tabla de Smbolos

Anlisis Semntico

Errores
Generacin de Cdigo Intermedio Optimizacin Generacin de Cdigo Destino
Salida

Diseo de Compiladores I - 2008

Estructura General de un Compilador 9

Fases de la Compilacin
Programa Fuente

Anlisis Lxico Anlisis Sintctico

Tabla de Smbolos

Anlisis Semntico

Errores
Generacin de Cdigo Intermedio Optimizacin Generacin de Cdigo Destino
Salida

Diseo de Compiladores I - 2008

Estructura General de un Compilador 10

Fases de la Compilacin
Errores

Programa Fuente

Anlisis Lxico

Anlisis Sintctico

Generacin de Cdigo

Salida

Tabla de Smbolos

Diseo de Compiladores I - 2008

Estructura General de un Compilador 11

Fases de la Compilacin
Errores

Programa Fuente

Anlisis Lxico

Anlisis Sintctico

Generacin de Cdigo

Salida

Tabla de Smbolos

Diseo de Compiladores I - 2008

Estructura General de un Compilador 12

Fases de la Compilacin
Suele haber preprocesadores para:
l l l l l

Eliminar comentarios Incluir archivos Expandir macros Efectuar compilacin condicional Reemplazar constantes simblicas

Diseo de Compiladores I - 2008

Estructura General de un Compilador 13

Fases de la Compilacin
Errores

Programa Fuente

Anlisis Lxico

Anlisis Sintctico

Generacin de Cdigo

Salida

Tabla de Smbolos

Diseo de Compiladores I - 2008

Estructura General de un Compilador 14

Anlisis Lxico
l l

l l

Lee el programa fuente. Remueve espacios en blanco, tabulaciones, saltos de lnea. Remueve comentarios. Agrupa los caracteres en unidades llamadas tokens.

Diseo de Compiladores I - 2008

Estructura General de un Compilador 15

Anlisis Lxico
Un token es una secuencia de caracteres que forman una unidad significativa

Diseo de Compiladores I - 2008

Estructura General de un Compilador 16

Anlisis Lxico
La interaccin entre el Anlisis Lxico y el Anlisis Sintctico puede ocurrir de distintas formas:
l l l

Ambas actividades se ejecutan en modo batch. Ambas actividades son concurrentes. Ambas actividades son rutinas del Generador de Cdigo. El Anlisis Lxico es una rutina del Anlisis Sintctico.

Diseo de Compiladores I - 2008

Estructura General de un Compilador 17

Anlisis Lxico
Ejemplo

if Plazo >= 30 then Tasa := Base + Recargo / 100 else Tasa := Base

Diseo de Compiladores I - 2008

Estructura General de un Compilador 18

Anlisis Lxico
Ejemplo

[if] [Plazo] [>=] [30] [then ] [Tasa] [:= ] [Base] [+] [Recargo] [/] [100] [else] [Tasa] [:= ] [Base]

Diseo de Compiladores I - 2008

Estructura General de un Compilador 19

Anlisis Lxico
Tokens
l

Palabras reservadas.
l

Ejemplos: IF, THEN, ELSE Ejemplos: +, >=, := Ejemplos: Identificador, Constante

Operadores
l

Cadenas de mltiples caracteres


l

Diseo de Compiladores I - 2008

Estructura General de un Compilador 20

Anlisis Lxico
Tokens
l l

Los tokens se diferencian de la cadena de caracteres que representan. La cadena de caracteres es el Lexema o valor lxico.
l

Existen tokens que se corresponden con un nico lexema


l

Ejemplo: Palabra Reservada IF

Existen tokens que pueden representar lexemas diferentes


l

Ejemplo: Identificador Plazo, Identificador Tasa


Estructura General de un Compilador 21

Diseo de Compiladores I - 2008

Anlisis Lxico
l

El Anlisis Lxico hace una correspondencia entre cada token y un nmero entero. El Anlisis Lxico entrega al Anlisis Sintctico los tokens. Cuando un token puede corresponder a ms de un lexema, el Anlisis Lxico entrega al Anlisis Sintctico el par token-atributo.

Diseo de Compiladores I - 2008

Estructura General de un Compilador 22

Anlisis Lxico
Token ID CTE IF THEN ELSE + / >= :=
Diseo de Compiladores I - 2008

Identificacin del token 27 28 59 60 61 70 73 80 85


Estructura General de un Compilador 23

Anlisis Lxico
Ejemplo

[if] [Plazo] [>=] [30] [then ] [Tasa] [:= ] [Base] [+] [Recargo] [/] [100] [else] [Tasa] [:= ] [Base]

Diseo de Compiladores I - 2008

Estructura General de un Compilador 24

Anlisis Lxico
Ejemplo

[59] [Plazo] [>=] [30] [then ] [Tasa] [:= ] [Base] [+] [Recargo] [/] [100] [else] [Tasa] [:= ] [Base]

Diseo de Compiladores I - 2008

Estructura General de un Compilador 25

Anlisis Lxico
Ejemplo

[59] [27] [>= ] [30 ] [then ] [Tasa] [:= ] [Base] [+] [Recargo] [/] [100] [else] [Tasa] [:= ] [Base]

Diseo de Compiladores I - 2008

Estructura General de un Compilador 26

Anlisis Lxico
Ejemplo

[59] [27] [80] [30 ] [then ] [Tasa] [:= ] [Base] [+] [Recargo] [/] [100] [else] [Tasa] [:= ] [Base]

Diseo de Compiladores I - 2008

Estructura General de un Compilador 27

Anlisis Lxico
Ejemplo

[59] [27] [80] [28] [then ] [Tasa] [:= ] [Base] [+] [Recargo] [/] [100] [else] [Tasa] [:= ] [Base]

Diseo de Compiladores I - 2008

Estructura General de un Compilador 28

Anlisis Lxico
Ejemplo

[59] [27] [80] [28] [60] [27] [85] [27] [70] [27] [73] [28] [61] [27] [85] [27]

Diseo de Compiladores I - 2008

Estructura General de un Compilador 29

Anlisis Lxico
Ejemplo

[59] [27, Plazo] [80] [28, 30] [60] [27, Tasa] [85] [27, Base] [70] [27,Recargo] [73] [28, 100] [61] [27,Tasa] [85] [27,Base]

Diseo de Compiladores I - 2008

Estructura General de un Compilador 30

Anlisis Lxico
Ejemplo
[59] [27] [80] [28] [60] [27] [85] [27] [70] [27] [73] [28] [61] [27] [85] [27] IF ID >= CTE THEN ID := ID + ID / CTE ELSE ID := ID

Diseo de Compiladores I - 2008

Estructura General de un Compilador 31

Fases de la Compilacin
Errores

Tira de tokens Programa Fuente

Anlisis Lxico

Anlisis Sintctico

Generacin de Cdigo

Salida

Tabla de Smbolos

Diseo de Compiladores I - 2008

Estructura General de un Compilador 32

Fases de la Compilacin
Errores

Tira de tokens Programa Fuente

Anlisis Lxico

Anlisis Sintctico

Generacin de Cdigo

Salida

Tabla de Smbolos

Diseo de Compiladores I - 2008

Estructura General de un Compilador 33

Anlisis Sintctico
Agrupa los tokens del programa fuente en frases gramaticales que el compilador usar en las siguientes etapas.

Diseo de Compiladores I - 2008

Estructura General de un Compilador 34

Anlisis Sintctico
Los tokens son smbolos terminales en la gramtica que describe al lenguaje fuente

Diseo de Compiladores I - 2008

Estructura General de un Compilador 35

Anlisis Sintctico
l

La estructura jerrquica de un programa es representada por reglas que constituyen una gramtica. Las reglas se representan por medio de producciones. Cada produccin define un smbolo no terminal en funcin de smbolos terminales o tokens, y otros smbolos no terminales. Existe una produccin que define al no terminal programa.
Estructura General de un Compilador 36

Diseo de Compiladores I - 2008

Anlisis Sintctico
Gramtica
5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18.

<sent> <sel > <sent> <asig > <sel > IF <cond > THEN <sent> ELSE <sent> <cond> <exp > <comp > <exp > <comp > < | > | <= | >= | == | <> <asig > ID := <exp > <exp > <exp > + <term> <exp > <exp > - <term> <exp > <term> <term> <term> <fact> <term> <term> / <fact> <term> <fact> <fact> ID <fact> CTE
Estructura General de un Compilador 37

Diseo de Compiladores I - 2008

Anlisis Sintctico
l

Usualmente, la estructura gramatical que el Anlisis Sintctico detecta en el cdigo fuente es representada por un rbol de parsing. El rbol de parsing demuestra como la secuencia de tokens de entrada puede ser derivada a partir de las reglas de una gramtica.
Estructura General de un Compilador 38

Diseo de Compiladores I - 2008

Anlisis Sintctico
rbol de Parsing
Tasa := Base + Recargo / 100 ID := ID + ID / CTE
asig

expr
(10) (11)

expr
(15) (13)

term

term
(16)

term
(16)

fact
(17)

fact
(17)

fact
(18)

ID

:=

ID

ID

CTE

Lista de reglas: 17 16 13 17 16 18 15 11 10
Diseo de Compiladores I - 2008 Estructura General de un Compilador 39

Fases de la Compilacin
Errores

Tira de tokens Programa Fuente

Lista de reglas

Anlisis Lxico

Anlisis Sintctico

Generacin de Cdigo

Salida

Tabla de Smbolos

Diseo de Compiladores I - 2008

Estructura General de un Compilador 40

Fases de la Compilacin
Errores

Tira de tokens Programa Fuente

Lista de reglas

Anlisis Lxico

Anlisis Sintctico

Generacin de Cdigo

Salida

Tabla de Smbolos

Diseo de Compiladores I - 2008

Estructura General de un Compilador 41

Generacin de Cdigo
Tercetos B C Lista de Reglas D rbol Sintctico I G H E A Polaca Inversa L Cuartetos Cdigo Assembler K F

Caminos posibles:

Camino 1: A Camino 2: D, I

Camino 3: E, L Camino 4: C, J

Camino 5: B, K Camino 6: D, F, K

Camino 7: D, G, J Camino 8: D, H, L

Diseo de Compiladores I - 2008

Estructura General de un Compilador 42

Generacin de Cdigo
rbol Sintctico
Es una representacin comprimida del rbol de Parsing.
Tasa := Base + Recargo / 100 ID := ID + ID / CTE
:=

ID

ID

ID

CTE

Diseo de Compiladores I - 2008

Estructura General de un Compilador 43

Anlisis Semntico
l l

Analiza el significado del programa. Chequea reglas que no pueden ser capturadas por la gramtica, pero que pueden ser verificadas en tiempo de compilacin. Estas reglas corresponden a la semntica esttica del lenguaje. Ejemplos:
l l

Chequeo de tipos en expresiones aritmticas. Chequeo de tipo y nmero de parmetros en la llamada a una rutina.
Estructura General de un Compilador 44

Diseo de Compiladores I - 2008

Anlisis Semntico
Ejemplo
Tasa := Base + Recargo / 100 ID := ID + ID / CTE
:=

ID

ID

ID

ItoF

CTE
Diseo de Compiladores I - 2008 Estructura General de un Compilador 45

Cdigo Intermedio
l

Representacin del cdigo fuente como un programa escrito para ser ejecutado en una mquina abstracta. Posibles representaciones intermedias:
l l l

Tercetos Cuartetos Polaca Inversa

Diseo de Compiladores I - 2008

Estructura General de un Compilador 46

Cdigo Intermedio
Ejemplo
Tasa := Base + Recargo / 100 ID := ID + ID / CTE
:= ID ID ID + /

14. 15. 16. 17.


ItoF CTE

18. 19.

(ItoF, 100, -) (/, Recargo, [15]) (+, Base, [16]) (:=, Tasa, [17])
Tercetos
Estructura General de un Compilador 47

rbol Sintctico
Diseo de Compiladores I - 2008

Optimizacin
l

Transforma la representacin actual del cdigo en una nueva versin que logra el mismo resultado ms eficientemente. Pueden aplicarse optimizaciones en diferentes etapas de la compilacin:
l l l l l

durante la creacin de la representacin intermedia, durante la transformacin de una representacin intermedia en otra, durante la traduccin del cdigo intermedio a la salida, luego de generar la salida, e incluso durante la linkedicin o la ejecucin.
Estructura General de un Compilador 48

Diseo de Compiladores I - 2008

Optimizacin
Ejemplo
Tasa := Base + Recargo / 100 ID := ID + ID / CTE
14. 15. 16. 17. 18. 19.

(ItoF, 100, -) (/, Recargo, [15]) (+, Base, [16]) (:=, Tasa, [17])
Tercetos

14. 15. 16. 17. 18.

(/, Recargo, 100.0) (+, Base, [15]) (:=, Tasa, [16])


Tercetos Optimizados
Estructura General de un Compilador 49

Diseo de Compiladores I - 2008

Generacin de Cdigo propiamente dicho


l

Se traduce la representacin intermedia del programa fuente en el cdigo nativo de la mquina destino. El cdigo generado efectuar el chequeo de las reglas de semntica dinmica del lenguaje, que no pudieron ser verificadas durante la compilacin.

Diseo de Compiladores I - 2008

Estructura General de un Compilador 50

Generacin de Cdigo Assembler


Ejemplo
Tasa := Base + Recargo / 100 ID := ID + ID / CTE
14. 15. 16. 17. 18.

(/, Recargo, 100.0) (+, Base, [15]) (:=, Tasa, [16])


Tercetos Optimizados

FLD, Recargo FLD, Cte1 FDIV FLD, Base FADD FSTP, Tasa
Cdigo Assembler
Estructura General de un Compilador 51

Diseo de Compiladores I - 2008

Fases de la Compilacin
Errores

Tira de tokens Programa Fuente

Lista de reglas

Anlisis Lxico

Anlisis Sintctico

Generacin de Cdigo

Salida

Tabla de Smbolos

Diseo de Compiladores I - 2008

Estructura General de un Compilador 52

Tabla de Smbolos
Es una estructura de datos que contiene un registro para cada identificador utilizado en el cdigo fuente, con campos que contienen informacin relevante para cada smbolo (atributos).

Diseo de Compiladores I - 2008

Estructura General de un Compilador 53

Tabla de Smbolos
l

Cuando el Anlisis Lxico detecta un token de tipo identificador, lo ingresa en la Tabla de Smbolos. Durante la Generacin de Cdigo se ingresa informacin para los atributos de los smbolos, y se usa esa informacin de diversas maneras. Durante la Generacin de Cdigo puede ser necesario incorporar nuevas entradas a la Tabla de Smbolos.

Diseo de Compiladores I - 2008

Estructura General de un Compilador 54

Fases de la Compilacin
Errores

Tira de tokens Programa Fuente

Lista de reglas

Anlisis Lxico

Anlisis Sintctico

Generacin de Cdigo

Salida

Tabla de Smbolos

Diseo de Compiladores I - 2008

Estructura General de un Compilador 55

Manejo de Errores
l

Cada una de las etapas del Compilador puede detectar errores que son informados al programador. Un buen compilador no debera terminar su ejecucin al detectar un error, sino que debera recuperarse y continuar con la compilacin.

Diseo de Compiladores I - 2008

Estructura General de un Compilador 56

Das könnte Ihnen auch gefallen