You are on page 1of 39

Teora de Compiladores

Teora de Compiladores
2014 - I
Facultad de Ingeniera Industrial,
Sistemas e Informtica
Mag William Joel Marn Rodriguez
wjmarrod@gmail.com
Escuela Acadmico Profesional de
Ingeniera Informtica
Teora de Compiladores
Analizador Lxico
Unidad I:
semana 03, 04
Sesin: 03, 04
Teora de Compiladores
3
Qu es un compilador?
C
CC
C++
FORTRAN
PASCAL
OBERON
Los clsicos ejemplos de
compiladores
Un compilador, es un traductor especial que toma un lenguaje de
alto nivel, y lo traduce a una representacin de bajo nivel (lenguaje
mquina), que la computadora puede ejecutar en ltima instancia.
COMPILADOR
Programa
fuente
Programa
objeto
Errores
Teora de Compiladores
4
Intrpretes
Un intrprete lo podemos definir, como un programa que va traduciendo
(compilando) el cdigo fuente, instruccin por instruccin, ejecutando de
esta forma el programa, y en algunos casos omitiendo el cdigo objeto o
resultado.
Tenemos a los conocidos
Scripts o lenguajes de Script.
php
perl
JavaScript
Shell
python
Ejemplos
Teora de Compiladores
5
Estructura del
programa fuente
Preprocesador
Programa fuente
compilador
Programa objeto
Ensamblador *
Cdigo de
mquina
(ejecutable)
Libro del dragn, Fig. 1.3, pg 5
Procesamiento de un lenguaje
Teora de Compiladores
6
Programa
fuente
Programa
fuente
Traductor (software)
Traductor (software)
Enlazador
Intrprete(firmware,
hardware o software)
Operaciones(firmware,
hardware o software)
Mensajes de error de traduccin
Computador virtual
(simulado completa
o parcialmente por
software)
Datos de ejecucin
Traduccin Carga Ejecucin
Biblioteca
de apoyo
en tiempo
de ejecucin
Teora de Compiladores
7
Proceso de programacin en un lenguaje de alto nivel
Teora de Compiladores
8
Analizador lxico
Programa fuente
Analizador sintctico
Analizador semntico
Generador cod. Interm.
Generador cod. objeto
Programa objeto
Tabla de smbolos
Libro del dragn, Fig. 1.9, pg 10
Manejo de errores
Fases de un compilador
Teora de Compiladores
9
Fases que dependen del lenguaje fuente
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
Front End
Fases que dependen de la mquina objetivo
Generacin de la salida
Optimizacin
Manejo de errores correspondiente a las fases del Back End
Operaciones sobre la Tabla de Smbolos
Back End
Teora de Compiladores
10
ESTRUCTURA DEL COMPILADOR

Compilador Es un conversor o transformador de tiras de caracteres;
transforma un programa fuente en un programa objeto.







Fuente
Explorador
Reconocedor
PARSER
Preparacin y
generador de
cdigo
objeto
Analizador Analizador
lexicogrfico sintctico
tira token parser
Tabla de smbolos
Teora de Compiladores
11
COMPILADOR
Anlisis





Sntesis








scanner
parser




Preparar
cdigo
Generar
cdigo
T
A
B
L
A
D
E
S
I
M
B
O
L
O
S
Fuente
Objeto
Teora de Compiladores
12

Anlisis lexicogrfico
Anlisis sintctico Ascendente
Anlisis
Compilador
sintctico Descendente

Preparar la generacin de cdigo
Sintesis
Generar cdigo

Teora de Compiladores
13
Anlisis
Lexicogrfico
Anlisis
Sintctico
Anlisis
Semntico
Generacin
de Cdigo
flex bison Cdigo en C a mano
El compilador simple de una sola pasada con el que
trabajaremos.
Compilador simple
Teora de Compiladores
14
Teora de Compiladores
15
Teora de Compiladores
16
Analizador Sintctico (Parser)
Generador de Cdigo
Optimizador de Cdigo
Analizador Semntico
Analizador Lxico (Scanner)
Parse Tree
Programa (character stream)
Token stream
Intermediate Representation
Optmized Intermediate Representation
Assembly code
Anatoma de un compilador
Teora de Compiladores
17
Anlisis
Lexicogrfico
Anlisis
Sintctico
Anlisis
Semntico
Generacin
de Cdigo
Tokens
rbol de
anlisis
gramatical
Representacin
Intermedia
Cdigo
resultado o
Ejecucin
Fases del compilador
Teora de Compiladores
18
Fases de la Compilacin
Programa
Fuente
Salida
Anlisis
Lxico
Anlisis
Sintctico
Generacin
de Cdigo
Tabla
de
Smbolos
Errores
*
Teora de Compiladores
19
Anlisis Lexicogrfico

Es la primera etapa del compilador.

Funcin:
Manejar el fichero del programa fuente, abrirlo, leerlo, grabarlo,
cerrarlo.
Hacer una lista del programa fuente, llevar un control de cada
cracter ledo.
Interpretar los tipos de datos, instrucciones de control.
Hacer la transformacin de tiras a token.
Teora de Compiladores
20
Lee el programa fuente.
Remueve espacios en blanco, tabulaciones, saltos de lnea.
Remueve comentarios.
Agrupa los caracteres en unidades llamadas tokens.
La interaccin entre el Anlisis Lxico y el Anlisis Sintctico puede
ocurrir de distintas formas:
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.

Anlisis Lxico
Teora de Compiladores
21
Se realiza con un scanner, su funcin principal es agrupar en
componentes lxicos (tokens), omitir comentarios y espacios
en blanco.
Anlisis
Lexicogrfico
Anlisis
Sintctico
Anlisis
Semntico
Generacin
de Cdigo
Fases del compilador
Teora de Compiladores
22
Qu es un analizador lxico?
Source Program Text Tokens
Ejemplos de Tokens:
operadores = + - > ( { := == <>
keywords if while for int double
literales numricos 43 6.035 -3.6e10 0x13f3a
literales de carcter 'a' '~' '\''
strings literales "6.983" "compiladores" "\"\""
Ejemplos de no-tokens
espacios en blanco espacio(' ') tab('\t') eol('\n')
comentarios /* este no es un token */
Teora de Compiladores
23
Un scanner recorre los caracteres de entrada del programa
fuente y va reconociendo componentes lxicos (tokens)
Token: unidad lxica indivisible
Ejs: while, if, for, variable, ==,
Los componentes lxicos suelen describirse mediante expresiones
regulares
La secuencia de caracteres correspondiente a un componente
lxico es el lexema.

Teora de Compiladores
24
Anlisis Lxico
Ejemplo
if Plazo >= 30
then Tasa := Base + Recargo / 100
else Tasa := Base
[if] [Plazo] [>=] [30]
[then] [Tasa] [:=] [Base] [+] [Recargo] [/] [100]
[else] [Tasa] [:=] [Base]
Teora de Compiladores
25
Palabras reservadas.
Ejemplos: IF, THEN, ELSE
Operadores
Ejemplos: +, =, :=
Cadenas de mltiples caracteres
Ejemplos: Identificador, Constante
Anlisis Lxico
Tokens
Los tokens se diferencian de la cadena de caracteres que
representan.
La cadena de caracteres es el Lexema o valor lxico.
Existen tokens que se corresponden con un nico lexema
Ejemplo: Palabra Reservada IF
Existen tokens que pueden representar lexemas diferentes
Ejemplo: Identificador Plazo, Identificador Tasa
Teora de Compiladores
26
Un identificador es una secuencia de letras y dgitos; el primer
caracter debe ser una letra. El guin bajo _ cuenta como una letra.
Las letras en maysculas y minsculas son distintas. Si el archivo
de entrada ha sido procesado en tokens hasta un caracter dado, el
siguiente token debe incluir el string ms grande de caracteres que
podra constituir un token. Los espacios en blanco, tabuladores,
nuevas lneas, y comentarios son ignorados excepto que sirven para
separar tokens. Se requiere algo de espacio en blanco para separar
identificadores, keywords, y constantes que de otra forma estaran
adyacentes.
Cmo describimos qu es un token?
Teora de Compiladores
27
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-
lexema.
Token Identificacin del
token
ID 27
CTE 28
IF 59
THEN 60
ELSE 61
+ 70
/ 73
>= 80
:= 85
Teora de Compiladores
28
[if] [Plazo] [>=] [30]
[then] [Tasa] [:=] [Base] [+] [Recargo] [/] [100]
[else] [Tasa] [:=] [Base]
[59] [Plazo] [>=] [30]
[then] [Tasa] [:=] [Base] [+] [Recargo] [/] [100]
[else] [Tasa] [:=] [Base]
Ejemplo
[59] [27] [>=] [30]
[then] [Tasa] [:=] [Base] [+] [Recargo] [/] [100]
[else] [Tasa] [:=] [Base]
[59] [27] [80] [30]
[then] [Tasa] [:=] [Base] [+] [Recargo] [/] [100]
[else] [Tasa] [:=] [Base]
Teora de Compiladores
29
[59] [27] [80] [28]
[then] [Tasa] [:=] [Base] [+] [Recargo] [/] [100]
[else] [Tasa] [:=] [Base]
[59] [27] [80] [28]
[60] [27] [85] [27] [70] [27] [73] [28]
[61] [27] [85] [27]
[59] [27, Plazo] [80] [28, 30]
[60] [27, Tasa] [85] [27, Base] [70] [27,Recargo] [73]
[28, 100]
[61] [27,Tasa] [85] [27,Base]
[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
Teora de Compiladores
30
Separar precisamente el stream de texto en el stream correcto de tokens
ID("var1") no ID("var") Num(1)
ID("var1") leq_op no ID("var1<=")
Identificar el tipo de token que hace match con el stream de input
10 Num(10)
var1 ID("var1")
f o r v a r 1 = 1 0 v a r 1 < =
Analizador lxico en accin
for
ID(var1) eq_op ID(var1) Num(10) leq_op
Teora de Compiladores
31
for
ID(var1) eq_op ID(var1) Num(10) leq_op
Describir diferentes tipos de tokens en diferentes lenguajes
FORTRAN DO I=1, 10
C++ for(int i=1; i < 10; i++)
C-shell foreach i (1 2 3 4 5 6 7 8 9)
Analizador lxico en accin
f o r v a r 1 = 1 0 v a r 1 < =
Teora de Compiladores
32
f o r v a r 1 = 1 0 v a r 1 < =
Analizador lxico en accin
f o r v a r 1 = 1 0 v a r 1 < =
for
f o r v a r 1 = 1 0 v a r 1 < =
for
Teora de Compiladores
33
f o r v a r 1 = 1 0 v a r 1 < =
f o r v a r 1 = 1 0 v a r 1 < =
Analizador lxico en accin
for
for
f o r v a r 1 = 1 0 v a r 1 < =
for
Teora de Compiladores
34
f o r v a r 1 = 1 0 v a r 1 < =
Analizador lxico en accin
for
f o r v a r 1 = 1 0 v a r 1 < =
ID(var1)
for
f o r v a r 1 = 1 0 v a r 1 < =
f o r v a r 1 = 1 0 v a r 1 < =
for ID(var1) eq_op
Teora de Compiladores
35
f o r v a r 1 = 1 0 v a r 1 < =
Analizador lxico en accin
for ID(var1) eq_op
f o r v a r 1 = 1 0 v a r 1 < =
for ID(var1) eq_op Num(10)
f o r v a r 1 = 1 0 v a r 1 < =
for ID(var1) eq_op Num(10)
f o r v a r 1 = 1 0 v a r 1 < =
for ID(var1) eq_op Num(10)
Teora de Compiladores
36
f o r v a r 1 = 1 0 v a r 1 < =
Analizador lxico en accin
f o r v a r 1 = 1 0 v a r 1 < =
f o r v a r 1 = 1 0 v a r 1 < =
for ID(var1) eq_op Num(10)
for ID(var1) eq_op Num(10)
for ID(var1) eq_op Num(10) ID(var1)
f o r v a r 1 = 1 0 v a r 1 < =
for ID(var1) eq_op Num(10) ID(var1)
f o r v a r 1 = 1 0 v a r 1 < =
for ID(var1) eq_op Num(10) ID(var1)
Teora de Compiladores
37
f
for
o r v a r 1 = 1 0 v a r 1 < =
ID(var1) eq_op Num(10) ID(var1) leq_op
Analizador lxico en accin
f o r v a r 1 = 1 0 v a r 1 < =
for ID(var1) eq_op Num(10) ID(var1) leq_op
Teora de Compiladores
38
El analizador lxico necesita...
Particionar el input en subsecuencias de caracteres denominados
tokens

Agregar los atributos a los tokens

Eliminar white space y comentarios
COMPILADOR
PROGRAMA
FUENTE
SALIDA
Mensajes
de
Error
Teora de Compiladores
Teora de Compiladores
2014 - I
Facultad de Ingeniera Industrial,
Sistemas e Informtica
Mag William Joel Marn Rodriguez
wjmarrod@gmail.com
Escuela Acadmico Profesional de
Ingeniera Informtica

You might also like