Vous êtes sur la page 1sur 28

A N A LIS IS

LEX IC O G R A FIC
O

IN TR O D U C C IO N
La

fase del anlisis lexicogrfico


de un
compilador agrupa Secuencia de caracteres en
categoras: rastreo y filtrado.
Rastreador mueve un apuntador a travs de la
entrada un carcter a la vez para hallar cadenas
continuas de caracteres, las cuales constituyen
elementos textuales individuales y clasifica cada
una de acuerdo con su tipo.
Filtro
descarta
algunos
de
los
tokens
encontrados por el rastreador determina cuales
otros smbolos reservados y coloca el texto de
los restantes en las tablas de nombres

2.1. EL P R O B LEM A D EL
A N A LISIS LEX IC O G R FIC O
Dada una cadena de

caracteres divdase en
una cadena de tokens:
token= (tipo, valor)
Al tipo de un token a
menudo se le llama
clase; los caracteres
reales se conocen
como lexemas.
Existen tres
formalismos o
modelos comunes.

Expresiones regulares.
Describen los tokens
como el conjunto de
cadenas permitidas en un
lenguaje.
Diagramas de
transicin. Describen los
tokens como las cadenas
permitidas que toman el
diagrama desde un
estado inicial hasta un
estado final.
Gramticas lineales.
Describen los tokens
como las cadenas
generadas por una
gramtica en forma

2. EJEM P LO S D E TO K EN S

MaxNum es identificado como un token

cuyo tipo es identificador y cuyo valor es


un apuntador a una tabla donde
MaxNum se lista como uno de los
nombres definidos por el usuario en el
programa.

2.3. R EC O N O C IM IEN TO D E
TO K EN S
El reconocimiento de tokens es difcil en algunos

lenguajes. Por ejemplo FORTRAN.


DO 15 I =1,25
DO 15 I=1.25
La primera sentencia es una construccin iterativa
llamada ciclo iterativo DO. La segunda es una
sentencia de asignacin. (El valor 1.25 se asigna a a
variable DO151 en FORTRAN, los espacios no son
significativos).
Una razn para esto es que algunas palabras como
IF y DECLARE (empleadas en lenguajes de alto nivel)
estn restringidas, es decir no pueden emplearse
como identificadores

EJEM P LO 1

Otra vez de FORTRAN


Lo siguiente es el principio se sentencias permitidas en

FORTRAN:
IF (1.E+6. LT. N)
IF (1 EQ. N)
(Para los lectores que no conocen FORTRAN, el primer
fragmento se lee si 1X es menor que N.) El problema
es el ejemplo 1 es que, habiendo rastreado los primeros 6
caracteres, no sabemos si.
IF (1.E. . .
Es el principio de
IF (1.E+6 .LT. N) . . .
O
IF (1 .EQ. N) . . .

2.4. FU N C IO N ES PR IN C IPLA ES D E
LO S A N A LIZA D O R ES
LEX ICO G R A FIC O S
Existen cuatro funciones principales

para un analizador lexicogrfico a


medida que va hallando tokens: (1)
utilidades de caracteres y manejo
de lneas, (2) prueba de predicado,
(3) acciones y (4) manejo de errores.

2.4.1 U tilidades de caracteres


y m anejo de lnea.

DameCar: Mueve el apuntador de bsqueda hacia adelante y regresa el


carcter siguiente.
Falla: Mueve

el apuntador de bsqueda hacia delante de regreso

al

apuntador actual.
Retraer: Mueve el apuntador de bsqueda hacia delante un carcter de
regreso.
Aceptar: Mueve

el apuntador actual hacia delante del apuntador de

bsqueda hacia adelante.

2.4.2 P rueba de P redicado


La prueba de predicado verifica la

membresa de un conjunto de
caracteres. Las utileras tpicas son:
EsLetra EsDigito EsDelimitador
EsC
Donde EsLetra(x) es un predicado
que regresa al valor verdadero si X
es una letra, EsDigito(x) es un
predicado que regresa al valor
verdadero si x es un digito.

2.4.3 A cciones
Hay una accin en cada tipo de token.
InstalaNombre: Pone el token nombre

en una tabla de nombres.


IsntalaLiteral: Pone el token literal en
una tabla de literales.
Podemos necesitar una accin para
cada carcter rastreado. Por ejemplo
cuando se rastrean los dgitos en un
nmero, podramos tener que convertir
la secuencia de caracteres a un nmero.

2.4.4 Errores
Cualquier cosa que el analizador

lexicogrfico no pueda reconocer y


clasificar se toma como un error.
Algunos errores, como l omisin de signos
de punto y coma de lenguajes que
requieren de ellos, u olvidar cerrar un
parntesis abierto con anterioridad, no
pueden ser identificados por el analizador
lexicogrfico, nicamente lee secuencias
de caracteres y decide si la palabra
(token) est incluida en el lenguaje o no.

2.5 D IA G R A M A S D E
TR A N SIC I N
Los diagramas de transicin

describen las acciones necesarias


para reconocer un token.
Formalmente un diagrama de
transicin es una grfica dirigida con
arcos etiquetados. Los nodos se
denominan estados y los arcos se
etiquetan con caracteres de entrada.
A menudo se emplean un doble
circulo para representar un estado
final o de aceptacin.

EJEM PLO :un identifi


cador se describe com o
una letra seguida por un nm ero arbitrario
de letras o dgitos.

Este diagram a puede describirse


en seudocdigo com o sigue:
{estado 1}: C:= DameCar

SI Esletra (C) ENTONCES


{estado 2}: Mientras Esletra (C) o EsDigito (C) hacer

C:= DameCar

TERMINAMIENTRAS
{estado 3}: Retraer- hemos rastreado un carcter de
mas
T:= (Id, Instala)
Aceptar
Regresa (t)
{estado 4}: OTRO Falla- comienza la bsqueda por un
token diferente
TERMINASI

2.6 A U T M ATA S FIN ITO S


Autmatas finitos, conocidos tambin como

mquinas de estado finito o maquinas


secuenciales.
Los autmatas finitos vienen en diferentes
tipos:
No determinsticos (NFA, por sus siglas en
Ingles)
Determinsticos (DFA, por la misma razn)
Determinsticos mnimos.
Distinguiremos entre estos mostrando algunos
ejemplos de cada uno.

EJEM PLO :Autm ata fi


nito no
determ instico

La primera pregunta que podemos hacernos es Qu es lo que


acepta este diagrama de transicin?, es decir, Cules caracteres
de entrada podra aceptar desde el inicio o estado 0 hasta el estado
final 2?
La respuestas es que autmata finito describe identificadores
especiales utilizados por la autora en un segmento de un sistema de
software al que describi alguna vez.

EJEMPLO 5: Otro autmata finito no determinstico

Aqu, LD se establece por letra o digito


Nuestra primera pregunta para el autmata en el ejemplo 5 debe ser
Qu significa
?
Utilizamos
para indicar que puede hacerse un movimiento sin
procesar ninguna entrada, y este movimiento se conoce como transicin
psilon. De nueva cuenta, esto puede ocasionar una situacin no
determinstica como en el estado 7, donde debe ser hecha una decisin
basada solo en esta informacin si se observa una entrada y quiz ir al
estado 8, o no observar ninguna entrada e ir al estado2.

La segunda pregunta debe ser de nuevo qu es lo que


acepta? Mediante un examen cuidadoso, notamos que la
secuencia de caracteres debe comenzar y finalizar con $.
En medio puede haber cualquier nmero de letras, dgitos o
signos de $, de modo que esto acepta la misma secuencia
de caracteres que el ejemplo precedente.
La tercera pregunta puede ser escrito un programa de
computadora en este caso? debe responderse no ya que
(como se ha mostrado) ninguna computadora puede decidir
basndose en ninguna otra informacin, si ve o no a los
caracteres de entrada.

EJEMPLO 6: Autmata finito determinstico

Esto acepta la misma secuencia de caracteres que los dos ejemplos


precedentes, es decir, secuencias de letras, dgitos y signos de $, las
cuales empiezan y terminan en $.
Debido a que puede determinarse definitivamente que hacer para cada
entrada de carcter, este es un autmata finito determinstico. Un purista
requerira un autmata determinstico para tener una transicin desde cada
estado en cada entrada posible. En este caso, tendramos una transicin
desde cada estado 0, cuando la entrada fuera una letra o digito hacia un
estado de error.
Un programa de computacin puede ser escrito con facilidad para simular
este autmata finito.

FUNDAMENTOS DE TEORIA DE
LENGUAJES
Los autmatas finitos descritos en la seccin
2.6 son un formalismo para describir conjuntos
de cadenas de caracteres. Son utilizados en
compiladores para reconocer los tokens en un
lenguaje de programacin. Existen otros tipos
formalismos para describir estos mismos
conjuntos. Uno de estos son las expresiones
regulares.

DEFINICIONES BASICAS
DEFINICION 1: ALFABETO: un conjunto
finito de smbolos utilizados en un lenguaje.
Por ejemplo:
A= {$, AZ, 09}
Denota un alfabeto llamado A qu consiste
de los smbolos $ y el conjunto de letras
(maysculas) y dgitos. (Hemos completado
la abreviacin AZ Y 09, en lugar de
listar tolas las letras y dgitos)

DEFINICION2:
CADENA=SENTENCIA=PALABRA:
una
sentencia finita de smbolos de un alfabeto.
Por ejemplo:
X= $AB1$
Denota una cadena de caracteres llamada
x que comienza y finaliza con $ny
contiene los caracteres AB1 entre los
signos $

DEFINICION 3: |X|: longitud de la cadena x


Por ejemplo:
|$AB1$|=5

DEFINICION 4:
vaca.
| |=0

: cadena (de caracteres)

DEFINICION 5: xy: concatenacin de cadenas


de las cadenas x y y.
Por ejemplo:
Si x=$AB1$ y y=$$ , entonces xy=$AB1$$$
Tambin
x= x = x

DEFINICION 7: LM: Concatenacin de los


lenguajes L y M = {xy|x(L, y M)}
Por ejemplo:
Si L={$} y M={x|x es una secuencia de letras o
dgitos}
Entonces
LM ={$x | x es una secuencia de letras o
dgitos}, es decir LM se compone de cadenas
de letras y dgitos que comienzan con un
signo de $.

DEFINICION 6: LENGUAJE: un conjunto de


cadenas
Por ejemplo:
L1 = {$$, $AB1$}
Denota el lenguaje L1 que consiste de las dos
cadenas $$, $AB1$

DEFINICION 8: Li : L concatenada i veces


Por ejemplo
Si L={x|x es una secuencia de letras y dgitos},
entonces L3 ={xyz|x,y,z son secuencias de
letras o dgitos}. L3 se compone de secuencias
de letras y dgitos de al menos longitud tres. L0
se define como el lenguaje que consiste de ,
es decir,
L0 = {}

DEFINICION 9: L U M: {x|x L o x M}
Por ejemplo
Si L = {$} y M = {$AB1$}, entonces L U M = {$,
$AB1$}
La unin del lenguaje vaco con un lenguaje L es
L:
{}UL=LU{}=L
La unin de {} con L puede no ser igual a L, a
menos que L contenga a
{} U L = L U {} L (a menos que este en L)

DEFINICION 10: CERRADURA DE


KLEENE DE L, L* = L0 U L1 U L2 U .
Por ejemplo, si L = {x|x es una letra o
digito}, entonces L+ = {sentencias de
letras o dgitos} U {}

DEFINICION 11: L+ =LL* = L1 U L2 U L3


U
Por ejemplo, si L = {x|x es una letra o
digito}, entonces L+= {secuencias de
letras o dgitos}

EXPRESIONES REGULARES
Una expresin regular es una formula para denotar ciertos
lenguajes. Advirtase que decimos lenguaje, no cadena de
caracteres. Una expresin regular nica denota un conjunto de
cadenas, es decir, un lenguaje, no una simple cadena. No todos los
lenguajes pueden ser expresados utilizando una expresin regular.
La siguiente tabla define en forma recursiva cuales lenguajes
pueden describirse mediante expresiones regulares.

CONVERSION DE EXPRESIONES
REGULARES
EN
AUTOMATAS
FINITOS
NO
Las expresiones regulares y autmatas finitos son notaciones alternativas
DETERMINISTICOS
para el mismo tipo de
lenguaje: tienen el mismo poder expresivo. Las
imgenes siguientes muestran como puede ser representada una expresin
regular por medio de un autmata finito no determinstico.

Este primer diagrama muestra que


la expresin regular la cual denota
el lenguaje que consiste de la
cadena vaca {}, puede ser
reconocido por el autmata finito no
determinstico que va desde su
estado inicial hasta su estado final
sin lectura de entrada, es decir,
mediante una transicin - .

Este diagrama muestra que el


lenguaje {a} denotado por la
expresin regular a es reconocido
por el autmata finito que va desde
su estado inicial hasta su estado
final por medio de la lectura de una
a.

Aqu, presumimos que los lenguajes


denotados por las expresiones regulares
R1 Y R2 son LR1 y LR2 respectivamente, los
cuales
son
reconocidos
por
los
autmatas finitos denotados por M1 y M2.
Al agregar transiciones al principio y al
final se crea un autmata finito que
reconocer
ya
sea
el
lenguaje
representado por R1 o el lenguaje
representado por R2, es decir, la unin de
estos dos lenguajes LR1 U LR2.

En el diagrama 4, M1 es la maquina que


acepta LR1 y M2 es el lenguaje que acepta
LR2. De este modo, despus de que este
autmata combinado ha reconocido una
cadena permitida en LR1, comenzara a
buscar cadenas permitidas en LR2. Esto es
exactamente el conjunto de cadenas
denotadas por R1.R2

Aqu, M es un autmata finito que


reconoce a LR. Al agregar un nuevo
estado inicial que es tambin un estado
final, reconoce la cadena vaca . La
transicin - de todos los estados finales
de M a su estado inicial permitirn el
reconocimiento de LiR, i=2,.