Sie sind auf Seite 1von 76

Departamento de Tecnologas de la Informacin

Tema 2 Anlisis lxico

Ciencias de la Computacin e Inteligencia Artificial

Tema 2. Anlisis lxico

ndice

2.1 Introduccin 2.2 Especificacin de categoras lxicas 2.3 Autmatas Finitos No Deterministas 2.4 Autmatas Finitos Deterministas 2.5 Implementacin de un analizador lxico

Procesadores de lenguaje

Tema 2. Anlisis lxico

ndice

2.1 Introduccin 2.2 Especificacin de categoras lxicas 2.3 Autmatas Finitos No Deterministas 2.4 Autmatas Finitos Deterministas 2.5 Implementacin de un analizador lxico

Procesadores de lenguaje

Tema 2. Anlisis lxico

2.1 Introduccin

2.1.1 Caractersticas del anlisis lxico


Lee caracteres. Produce componentes lxicos (tokens).

Filtra comentarios.
Filtra separadores mltiples (espacios, tabuladores y saltos de lnea). Lleva el contador de lnea y columna del texto fuente. Genera errores en caso de que la entrada no corresponda a ninguna categora lxica.

Procesadores de lenguaje

Tema 2. Anlisis lxico

2.1 Introduccin

2.1.2 Algunas definiciones


Categora lxica:
Tipo de smbolo elemental del lenguaje fuente, (identificadores, palabras clave, constantes numricas, operadores, ...).

Componente lxico (token):


Elemento perteneciente a una categora lxica.

Atributos de un componente:
Informacin del componente necesaria en etapas posteriores del anlisis (valor de la constante, nombre de una variable, ...).

Lexema:
Cadena de caracteres correspondiente al componente lxico.

Procesadores de lenguaje

Tema 2. Anlisis lxico

2.1 Introduccin

2.1.3 Categoras lxicas ms habituales


Palabras clave:
Palabras con un significado especial en el lenguaje (if, then, else, for, while, do, switch, case, ...) Suelen ser palabras reservadas.

Identificadores:
Nombres de variables, de constantes, de funciones, de tipos... ( media, valor0, i1, _PI, ...)

Operadores:
Smbolos que identifican operaciones aritmticas y lgicas. ( + , - , * , / , %, = , ++ , -- , += , -= , *= , /= , ==, !=, && , || , & , | , ...)
6

Procesadores de lenguaje

Tema 2. Anlisis lxico

2.1 Introduccin

2.1.3 Categoras lxicas ms habituales


Constantes numricas:
Literales que especifican valores numricos (325, 3.141592, 0xA3F2, 0.2e+3)

Constantes de carcter o cadenas:


Literales con el valor de un carcter o de una cadena ( z, \n, ejemplo de cadena, ...)

Smbolos especiales:
Separadores, delimitadores, terminadores, etc. ( { , }, [ , ] , ( , ) , ; , , )

Procesadores de lenguaje

Tema 2. Anlisis lxico

2.1 Introduccin

2.1.3 Categoras lxicas ms habituales


Blancos:
Caracteres de separacin de componentes lxicos (espacios, tabuladores, saltos de lnea) El anlisis lxico se limita a suprimirlos.

Comentarios:
Informacin para el lector del programa. ( /* comentario multilnea */, // comentario de una lnea \n, /** comentario para la documentacin */ ) - El anlisis lxico los elimina.

Fin de entrada:
Componente ficticio que indica el final de lectura.
8

Procesadores de lenguaje

Tema 2. Anlisis lxico

ndice

2.1 Introduccin 2.2 Especificacin de categoras lxicas 2.3 Autmatas Finitos No Deterministas 2.4 Autmatas Finitos Deterministas 2.5 Implementacin de un analizador lxico

Procesadores de lenguaje

Tema 2. Anlisis lxico

2.2 Especificacin de categoras lxicas

2.2.1 Gramticas regulares


Tipos de producciones:
<A> a <B> <A> a <A> l

Ejemplo: nmeros enteros


<S> 0 <S> <S> 1 <S> <S> 2 <S> <S> 3 <S> <S> 4 <S> <S> 5 <S> <S> 6 <S> <S> 7 <S> <S> 8 <S> <S> 9 <S> <S> 0 <S> 1 <S> 2 <S> 3 <S> 4 <S> 5 <S> 6 <S> 7 <S> 8 <S> 9

10

Procesadores de lenguaje

Tema 2. Anlisis lxico

2.2 Especificacin de categoras lxicas

2.2.1 Gramticas regulares


Notacin simplificada
<S> 0 <S> | 1 <S> | 2 <S> | 3 <S> | 4 <S> | 5 <S> | 6 <S> | 7 <S> | 8 <S> | 9 <S> <S> 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9

Ejemplo: palabra clave protected


<S> p <A1> <A4> e <A5> <A8> d <A1> r <A2> <A5> c <A6> <A2> o <A3> <A6> t <A7> <A3> t <A4> <A7> e <A8>

Ejemplo: identificador
<S> a <A> | b <A> | c <A> | d <A> | ... | A <A> | B <A> | C <A> | D <A> ... <A> a <A> | ... | Z <A> | 0 <A> | ... | 9 <A> | a | ... | Z | 0 | ... | 9
11

Procesadores de lenguaje

Tema 2. Anlisis lxico

2.2 Especificacin de categoras lxicas

2.2.2 Expresiones regulares


Concatenacin de lenguajes L y M
LM = { xy | x L y M }

Notacin:
Lk = L concatenado consigo mismo k-1 veces L0 = { l } L1 = L

Clausura de L
Conjunto de cadenas que pueden obtenerse concatenando un nmero arbitrario de cadenas de L L* = U Lk
k= 0

12

Procesadores de lenguaje

Tema 2. Anlisis lxico

2.2 Especificacin de categoras lxicas

2.2.2 Expresiones regulares


Ejemplos:
L = { a , b, c } M = { x, y, z } LM = { ax, ay, az, bx, by, bz, cx, cy, cz } L3 = { aaa, aab, aac, aba, abb, abc, aca, acb, acc, baa, bab, bac, bba, bbb, bbc, bca, bcb, bcc, caa, cab, cac, cba, cbb, cbc, cca, ccb, ccc } L* = { l, a, b, c, aa, ab, ac, ba, bb, bc, ca, cb, cc, aaa, ... }
13

Procesadores de lenguaje

Tema 2. Anlisis lxico

2.2 Especificacin de categoras lxicas

2.2.2 Expresiones regulares


Expresin regular f: lenguaje vaco Lf = f Expresin regular l: lenguaje de la cadena vaca Ll = { l } Expresin regular a (con a S): lenguaje La = { a } Expresin regular rs: lenguaje LrLs Expresin regular r|s: lenguaje Lr U Ls Expresin regular r*: lenguaje (Lr)*

14

Procesadores de lenguaje

Tema 2. Anlisis lxico

2.2 Especificacin de categoras lxicas

2.2.2 Expresiones regulares


Ejemplos:
( a| b )* = { l, a, b, aa, ab, ba, bb, aaa, aab, aba, abb, ... } n enteros : ( 0| 1 | 2 | 3 | 4 | 5| 6 | 7 | 8 | 9)* n enteros : ( (1 | 2 | 3 | 4 | 5| 6 | 7 | 8 | 9) ( 0| 1 | 2 | 3 | 4 | 5| 6 | 7 | 8 | 9)* | 0 ) n reales : ( 0| 1 | 2 | 3 | 4 | 5| 6 | 7 | 8 | 9)* ( . ( 0| 1 | 2 | 3 | 4 | 5| 6 | 7 | 8 | 9)* |l)

15

Procesadores de lenguaje

Tema 2. Anlisis lxico

2.2 Especificacin de categoras lxicas

2.2.2 Expresiones regulares


Abreviaturas (expresiones regulares extendidas):
[a,f,j] = (a|f|j) (los corchetes representan opciones) [0-9] = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] (el guin indica intervalo) [0-9, a-z, A-Z, _] (puede aparecer ms de un guin entre corchetes) r+ = rr* r? = (r|l) (el signo + indica clausura positiva) (el signo ? indica opcionalidad)

~[0-9] = cualquier carcter excepto un dgito (el smbolo ~ significa caracteres excluidos) ~[] = cualquier carcter
16

Procesadores de lenguaje

Tema 2. Anlisis lxico

2.2 Especificacin de categoras lxicas

2.2.2 Expresiones regulares


Ejemplos:
Identificadores: [a-z,A-Z,_][a-z,A-Z,0-9, _]* Nmeros enteros: ( [1- 9][0- 9]* | 0 ) Nmeros reales: [0-9]+ ( . [0- 9]+ )? Nmeros hexadecimales: 0x [0-9,a- f,A- F]+ Comentarios en C: /* ( ~[*] | (*)+ ~[*,/] )* ( * )+ / Palabras clave: if | then | else

17

Procesadores de lenguaje

Tema 2. Anlisis lxico

ndice

2.1 Introduccin 2.2 Especificacin de categoras lxicas 2.3 Autmatas Finitos No Deterministas 2.4 Autmatas Finitos Deterministas 2.5 Implementacin de un analizador lxico

18

Procesadores de lenguaje

Tema 2. Anlisis lxico

2.3 Autmatas Finitos No Deterministas

2.3.1 Reconocedores de lenguajes regulares


Un reconocedor de lenguaje es un programa que toma como entrada una cadena y devuelve verdadero o falso en funcin de si la cadena pertenece o no al lenguaje. Los lenguajes regulares (descritos por gramticas regulares o por expresiones regulares) pueden ser reconocidos por medio de Autmatas Finitos (Finite State Machines) Existen dos tipos de Autmatas Finitos:
Autmatas Finitos No Deterministas (AFN) Autmatas Finitos Deterministas (AFD)

19

Procesadores de lenguaje

Tema 2. Anlisis lxico

2.3 Autmatas Finitos No Deterministas

2.3.2 Definicin de AFN


Quintupla: (Q, S, E, q0, F)
Q: Conjunto finito de estados S: Alfabeto de smbolos E: Conjunto de arcos (Q S Q) que representan transiciones entre estados ante un determinado smbolo (incluido l) q0: Estado inicial (q0 Q) F: Conjunto de estados finales (F Q)

20

Procesadores de lenguaje

Tema 2. Anlisis lxico

2.3 Autmatas Finitos No Deterministas

2.3.2 Definicin de AFN


Representacin grfica:
Estado:

A
a l

Arco:

Estado final:

A
[a-z] ~[+]

Arcos agrupados:

21

Procesadores de lenguaje

Tema 2. Anlisis lxico

2.3 Autmatas Finitos No Deterministas

2.3.2 Definicin de AFN


Ejemplo: binarios cuyo tercer ltimo dgito es un 0
0 0 0 0

A
1

B
1

C
1

Ejemplo: cadenas formadas por a o cadenas por b


a
l

2
b

0
l

4
22

Procesadores de lenguaje

Tema 2. Anlisis lxico

2.3 Autmatas Finitos No Deterministas

2.3.3 Funcionamiento de un AFN


Camino: lista de estados en la que a partir de cada estado se puede llegar al siguiente por medio de una transicin del autmata. Cadena aceptada x: si existe un camino que parta de q0, acepte la entrada x y termine en un estado final. Lenguaje reconocido por el autmata: conjunto de cadenas aceptadas En un AFN, dada una cadena pueden existir varios caminos. Una cadena es aceptada si al menos uno de los caminos conduce a un estado final
23

Procesadores de lenguaje

Tema 2. Anlisis lxico

2.3 Autmatas Finitos No Deterministas

2.3.3 Funcionamiento de un AFN


Dada una cadena x, se puede considerar el estado del AFN (macroestado) como el conjunto de estados a los que se puede llegar partiendo del estado inicial y realizando transiciones siguiendo la cadena x Una cadena es reconocida por el AFN si su macroestado contiene algn estado final Ejemplo:
Binarios cuyo tercer ltimo dgito es un 0 Cadena 01001 Macroestado: { A, C, D }

24

Procesadores de lenguaje

Tema 2. Anlisis lxico

2.3 Autmatas Finitos No Deterministas

2.3.3 Funcionamiento de un AFN


Dado un conjunto de estados E, se denomina clausura-l(E) al conjunto de estados formado por todos los estados de E ms aquellos estados a los que se pueda acceder desde E mediante transiciones l. El macroestado inicial del AFN es clausura-l (q0). Partiendo de un macroestado Ei, el resultado de una transicin con el smbolo a es un macroestado Ei+1 = clausura-l(E), donde E est formado por todos aquellos estados que se puedan alcanzar con transiciones con el smbolo a a partir de alguno de los estados de Ei.
25

Procesadores de lenguaje

Tema 2. Anlisis lxico

2.3 Autmatas Finitos No Deterministas

2.3.4 Creacin de un AFN a partir de una gramtica regular


Cada smbolo no terminal genera un estado El smbolo inicial genera el estado inicial Se aade un estado final <F> Cada produccin de tipo <A> a <B> genera una transicin del estado <A> al <B> con el smbolo a Cada produccin del tipo <A> a genera una transicin del estado <A> al estado final <F> con el smbolo a

26

Procesadores de lenguaje

Tema 2. Anlisis lxico

2.3 Autmatas Finitos No Deterministas

2.3.4 Creacin de un AFN a partir de una gramtica regular


Ejemplo: nmeros enteros
<S> 0 <S> <S> 1 <S> <S> 2 <S> <S> 3 <S> <S> 4 <S> <S> 5 <S> <S> 6 <S> <S> 7 <S> <S> 8 <S> <S> 9 <S> [0-9] [0-9] <S> 0 <S> 1 <S> 2 <S> 3 <S> 4 <S> 5 <S> 6 <S> 7 <S> 8 <S> 9

AFN

F
27

Procesadores de lenguaje

Tema 2. Anlisis lxico

2.3 Autmatas Finitos No Deterministas

2.3.5 Creacin de un AFN a partir de una expresin regular


Expresin regular l:
l

Expresin regular a:

Expresin regular rs:

f
28

Procesadores de lenguaje

Tema 2. Anlisis lxico

2.3 Autmatas Finitos No Deterministas

2.3.5 Creacin de un AFN a partir de una expresin regular


r

Expresin regular r | s:

l s

i
l

f
l

Expresin regular r*:

l
29

Procesadores de lenguaje

Tema 2. Anlisis lxico

2.3 Autmatas Finitos No Deterministas

2.3.5 Creacin de un AFN a partir de una expresin regular


Propiedades
El AFN tiene como mximo el doble de estados que el nmero
de smbolos y operadores de la expresin regular El AFN tiene un estado inicial y un estado final Cada estado tiene tan slo una transicin con un smbolo del alfabeto, o dos transiciones l.

30

Procesadores de lenguaje

Tema 2. Anlisis lxico

ndice

2.1 Introduccin 2.2 Especificacin de categoras lxicas 2.3 Autmatas Finitos No Deterministas 2.4 Autmatas Finitos Deterministas 2.5 Implementacin de un analizador lxico

31

Procesadores de lenguaje

Tema 2. Anlisis lxico

2.4 Autmatas Finitos Deterministas

2.4.1 Definicin de AFD


Quintupla: (Q, S, E, q0, F)
Q: Conjunto finito de estados S: Alfabeto de smbolos E: Conjunto de arcos (Q S Q) que representan transiciones entre estados ante un determinado smbolo q0: Estado inicial (q0 Q) F: Conjunto de estados finales (F Q) No se admiten transiciones l Condicin de determinismo: no existen transiciones que partan del mismo estado con el mismo smbolo

32

Procesadores de lenguaje

Tema 2. Anlisis lxico

2.4 Autmatas Finitos Deterministas

2.4.1 Definicin de AFD


Ejemplo:
0 1 0

A
Ejemplo:
p r o t 1

B
e c t e d

A
Ejemplo:

B
/

E
~[*]

G
*

H
/

C
~[*,/]

E
33

Procesadores de lenguaje

Tema 2. Anlisis lxico

2.4 Autmatas Finitos Deterministas

2.4.2 Funcionamiento de un AFD


Camino: lista de estados en la que a partir de cada estado se puede llegar al siguiente por medio de una transicin del autmata. Cadena aceptada x: si existe un camino que parta de q0, acepte la entrada x y termine en un estado final. Lenguaje reconocido por el autmata: conjunto de cadenas aceptadas En un AFD slo existe un camino posible, es decir, dada una cadena, slo es posible llegar a un estado a partir del estado inicial.
34

Procesadores de lenguaje

Tema 2. Anlisis lxico

2.4 Autmatas Finitos Deterministas

2.4.3 Creacin de un AFD a partir de un AFN


Los AFD tienen la misma capacidad expresiva que los AFN, es decir, dado un AFN existe un AFD capaz de reconocer el mismo lenguaje Cada macroestado del AFN corresponde a un estado del AFD Potencialmente, para un AFN de N estados existen 2N macroestados posibles, aunque la inmensa mayora son estados inalcanzables

35

Procesadores de lenguaje

Tema 2. Anlisis lxico

2.4 Autmatas Finitos Deterministas

2.4.3 Creacin de un AFD a partir de un AFN


Algoritmo para construir un AFD a partir de un AFN:
Generar el estado inicial del AFD como el macroestado inicial del AFN e incluirlo en una lista de estados por analizar Analizar el primer estado de la lista por analizar:
Extraer el primer estado de la lista e introducirlo en la lista de estados analizados Estudiar las transiciones del estado para cada smbolo del alfabeto Si el macroestado correspondiente a una transicin no ha aparecido con anterioridad, crear un nuevo estado del AFD correspondiente a dicho macroestado e incluirlo en la lista de estados por analizar

Repetir el paso anterior hasta que no queden estados por analizar

Los estados finales del AFD son aquellos que correspondan a


macroestados que contengan algn estado final del AFN Procesadores de lenguaje
36

Tema 2. Anlisis lxico

2.4 Autmatas Finitos Deterministas

2.4.3 Creacin de un AFD a partir de un AFN


Ejemplo: (a | b)* abb
l a

2
l

3
l l a b b l

10

37

Procesadores de lenguaje

Tema 2. Anlisis lxico

2.4 Autmatas Finitos Deterministas

2.4.3 Creacin de un AFD a partir de un AFN


l

2 a l l b 4
l

3
l l 5

10

Estado inicial: A = { 0, 1, 2 , 4, 7 } Transicin de A con a: B = { 1, 2, 3, 4, 6, 7, 8 } Transicin de A con b: C = { 1, 2, 4, 5, 6, 7 } Transicin de B con a: B Transicin de B con b: D = { 1, 2, 4, 5, 6, 7, 9 } Transicin de C con a: B Transicin de C con b: C Transicin de D con a: B Transicin de D con b: E = { 1, 2, 4, 5, 6, 7, 10 } (final) Transicin de E con a: B Transicin de E con b: C
38

Procesadores de lenguaje

Tema 2. Anlisis lxico

2.4 Autmatas Finitos Deterministas

2.4.3 Creacin de un AFD a partir de un AFN


Resultado
b

C
b a

a a

b a

D
a

39

Procesadores de lenguaje

Tema 2. Anlisis lxico

2.4 Autmatas Finitos Deterministas

2.4.4 Creacin de un AFD a partir de una expresin regular


1 opcin:
Generar un AFN a partir de la expresin regular
Generar el AFD a partir del AFN

2 opcin:
Generar el AFD directamente a partir de la expresin regular

40

Procesadores de lenguaje

Tema 2. Anlisis lxico

2.4 Autmatas Finitos Deterministas

2.4.4 Creacin de un AFD a partir de una expresin regular


Caractersticas del algoritmo:
Se introduce un punto en la expresin regular para indicar la
parte reconocida en cada momento Un estado del autmata est asociado a un conjunto de expresiones regulares con puntos El estado inicial se obtiene colocando el punto al comienzo de la expresin regular Las transiciones de cada estado corresponden al consumo de algn smbolo, y dan lugar al desplazamiento del punto en la expresin regular
41

Procesadores de lenguaje

Tema 2. Anlisis lxico

2.4 Autmatas Finitos Deterministas

2.4.4 Creacin de un AFD a partir de una expresin regular


Ejemplo: [a-z][0-9]
Estados: {.[a-z][0-9]}, {[a-z].[0-9]}, {[a-z][0-9].}
Autmata: [a-z] [0-9]

.[a-z][0-9]

[a-z].[0-9]

[a-z][0-9].

42

Procesadores de lenguaje

Tema 2. Anlisis lxico

2.4 Autmatas Finitos Deterministas

2.4.4 Creacin de un AFD a partir de una expresin regular


Ejemplo: ([a-z])*[0-9]
Estados: { (.[a-z])*[0-9], ([a-z])*.[0-9] } , { ([a-z])*[0-9].}
Autmata: [a-z]

[0-9]

(.[a-z])*[0-9], ([a-z])*.[0-9]

([a-z])*[0-9].

43

Procesadores de lenguaje

Tema 2. Anlisis lxico

2.4 Autmatas Finitos Deterministas

2.4.4 Creacin de un AFD a partir de una expresin regular


Ejemplo: t (a|alo|re) n
Estados: { .t(a|alo|re)n },
{ t(.a|alo|re)n , t(a|.alo|re)n, t(a|alo|.re)n }, { t(a|alo|re).n, t(a|a.lo|re)n}, { t(a|alo|r.e)n }, { t(a|alo|re)n. }, { t(a|al.o|re)n }, { t(a|alo|re).n }

44

Procesadores de lenguaje

Tema 2. Anlisis lxico

2.4 Autmatas Finitos Deterministas

2.4.4 Creacin de un AFD a partir de una expresin regular


Ejemplo: t (a|alo|re) n
Autmata:
.t(a|alo|re)n t r t(a|alo|re)n. n l t(a|al.o|re)n
45

t(a|alo|r.e)n n

t(.a|alo|re)n t(a|.alo|re)n t(a|alo|.re)n


a t(a|alo|re).n t(a|a.lo|re)n

t(a|alo|re).n o

Procesadores de lenguaje

Tema 2. Anlisis lxico

2.4 Autmatas Finitos Deterministas

2.4.4 Creacin de un AFD a partir de una expresin regular


Formalizacin:
tem no bsico a.lg a.(b)g a.(b)*g a(b.)*g a.(b1|b2|...)g a(...|b.|...)g tems bsicos al.g a(.b)g a(.b)*g a(b)*.g a(.b)*g a(b)*.g a(.b1|b2|...)g a(b1|.b2|...)g ... a(...|b|...).g
46

Procesadores de lenguaje

Tema 2. Anlisis lxico

2.4 Autmatas Finitos Deterministas

2.4.5 Minimizacin de estados de un AFD


Algoritmo:
(Paso1) Crear una particin con dos grupos: los estados finales y los no finales (Paso 2) Para cada grupo con varios estados, dividir el grupo en subgrupos tales que dos estados, s y t, estn en el mismo subgrupo si y solo si para cada smbolo a, si existe la transicin desde s con el smbolo a hacia un estado de un cierto grupo, entonces debe existir la transicin desde t con el smbolo a hacia un estado del mismo grupo. (Paso 3) Repetir el paso 2 hasta que no se dividan ms grupos (Paso 4) Cada grupo representa un estado en el AFD minimizado

(Paso 5) Eliminar los estados no alcanzables desde el estado inicial y


los que no tengan transiciones que puedan conducir a un estado final
47

Procesadores de lenguaje

Tema 2. Anlisis lxico

2.4 Autmatas Finitos Deterministas

2.4.5 Minimizacin de estados de un AFD


Ejemplo
b b

C
a

a a

b a

D
a

a A B C D E B B B B B

b C D C E C F E1 A B C D E

a E1 E1 E1 E1 E1

b E1 E1 E1 F E1 E2 F E1 A B C D E

a E1 E1 E1 E1 E1

b E1 E2 E1 F E1
48

Procesadores de lenguaje

Tema 2. Anlisis lxico

2.4 Autmatas Finitos Deterministas

2.4.5 Minimizacin de estados de un AFD


Ejemplo
b

E1
a b a

E2
a

E3
a

a A B C D E B B B B B

b C D C E C E1 E2 E3 F A C B D E

a E2 E2 E2 E2 E2

b E1 E1 E3 F E1

No existen estados no alcanzables No existen estados que no conduzcan a un estado final


49

Procesadores de lenguaje

Tema 2. Anlisis lxico

2.4 Autmatas Finitos Deterministas

2.4.6 Comparacin AFD vs AFN


Tienen la misma capacidad descriptiva Nmero de estados (memoria ocupada):
en un AFN crece linealmente con el tamao de la expresin. Una expresin de tamao r puede ser reconocida por un AFN de 2r estados en un AFD crece exponencialmente con el tamao de la expresin. En el peor caso, una expresin de tamao r puede necesitar un AFD con 2r estados

El tiempo de anlisis:
en un AFD es de orden O(n)

en un AFN es de orden O(n*r)


n (tamao de la cadena), r (tamao de la expresin)
50

Procesadores de lenguaje

Tema 2. Anlisis lxico

ndice

2.1 Introduccin 2.2 Especificacin de categoras lxicas 2.3 Autmatas Finitos No Deterministas 2.4 Autmatas Finitos Deterministas 2.5 Implementacin de un analizador lxico

51

Procesadores de lenguaje

Tema 2. Anlisis lxico

2.5 Implementacin de un analizador lxico

2.5.1 Caractersticas Objetivo:


Dividir el flujo de entrada en componentes lxicos

Caractersticas:
Cada categora lxica tiene asociada su expresin regular y un
conjunto de acciones (emitir u omitir, calcular un valor,...) Estrategia avariciosa: intentar reconocer la cadena ms larga posible antes de cambiar de categora lxica. Utilizaremos mquinas discriminadoras deterministas (MDD) para implementarlos

52

Procesadores de lenguaje

Tema 2. Anlisis lxico

2.5 Implementacin de un analizador lxico

2.5.2 Mquina discriminadora determinista Funcionamiento:


Muy similar al autmata finito determinista Tienen asociadas acciones a los estados finales

Creacin de una MDD


Paso 1: Aadir un smbolo especial a cada expresin regular Paso 2: Unir todas las expresiones en una Paso 3: Construir el AFD de la expresin Paso 4: Eliminar los estados finales y los arcos de smbolos especiales Paso 5: Convertir en estados finales los estados origen de los arcos de smbolos especiales

Paso 6: Asociar a estos estados las acciones correspondientes


53

Procesadores de lenguaje

Tema 2. Anlisis lxico

2.5 Implementacin de un analizador lxico

2.5.2 Mquina discriminadora determinista Ejemplo (Paso 1):


categora entero real identificador asignacin rango blanco eof Expresin regular [0-9][0-9]*#entero [0-9][0-9]*\.[0-9][0-9]*#real [a-zA-Z][a-zA-Z0-9]*#identificador :=#asignacin \.\.#rango [ \t\n][ \t\n]*#blanco eof#eof

54

Procesadores de lenguaje

Tema 2. Anlisis lxico

2.5 Implementacin de un analizador lxico

2.5.2 Mquina discriminadora determinista Ejemplo (Paso 2):

Expresin regular [0-9][0-9]*#entero|[0-9][0-9]*\.[0-9][0-9]*#real

|[a-zA-Z][a-zA-Z0-9]*#identificador|:=#asignacin |\.\.#rango| [ \t\n][ \t\n]*#blanco| eof#eof

55

Procesadores de lenguaje

Tema 2. Anlisis lxico

2.5 Implementacin de un analizador lxico

2.5.2 Mquina discriminadora determinista Ejemplo (Paso 3):


[0-9] . [0-9] [0-9]

1
[0-9] : .

2
= .

3
#entero #real #asign #rango #ident

4 6
[a-zA-Z]

5 7

11

[a-zA-Z]

8
[ \t\n] eof [ \t\n]

#blanco

9 10

#eof

56

Procesadores de lenguaje

Tema 2. Anlisis lxico

2.5 Implementacin de un analizador lxico

2.5.2 Mquina discriminadora determinista Ejemplo (Paso 4-6):


[0-9] . [0-9] [0-9]

1
[0-9] : .

2
= .

emitir real emitir entero emitir asignacin emitir rango

4 6
[a-zA-Z]

5 7
[a-zA-Z]

8
[ \t\n] eof [ \t\n]

emitir identificador omitir emitir eof


57

9 10

Procesadores de lenguaje

Tema 2. Anlisis lxico

2.5 Implementacin de un analizador lxico

2.5.2 Mquina discriminadora determinista Funcionamiento:


Inicialmente la mquina se encuentra en el estado 0. Evoluciona como un AFD hasta encontrar un carcter no

reconocido (estrategia avariciosa).


Retrocede hasta el ltimo estado final encontrado. Ejecuta las acciones asociadas al estado final. Vuelve al estado inicial.

58

Procesadores de lenguaje

Tema 2. Anlisis lxico

2.5 Implementacin de un analizador lxico

2.5.3 Tratamiento de errores Deteccin:


Cuando no se ha alcanzado ningn estado final siguiendo el comportamiento anterior.

Tratamiento:
Generar un error lxico. Devolver los caracteres ledos. Eliminar el primer carcter. Continuar el anlisis.

59

Procesadores de lenguaje

Tema 2. Anlisis lxico

2.5 Implementacin de un analizador lxico

2.5.3 Tratamiento de errores Tratamiento alternativo:


Crear expresiones regulares que describan errores lxicos Ejemplo:
ErrorNmeroReal: \.[0-9]+
ErrorRango: \.

Permite dar mucha ms informacin con el error

60

Procesadores de lenguaje

Tema 2. Anlisis lxico

2.5 Implementacin de un analizador lxico

2.5.3 Tratamiento de errores Herramientas automticas:


Suelen abortar al detectar errores lxicos Solucin:
Aadir categoras lxicas que detecten los errores
Emitir tokens de error lxico

61

Procesadores de lenguaje

Tema 2. Anlisis lxico

2.5 Implementacin de un analizador lxico

2.5.3 Tratamiento de errores Errores en las acciones asociadas :


Suelen corresponder a lexemas con valores no permitidos (nmeros fuera de rango, por ejemplo)

Solucin no recomendada:
Utilizar expresiones regulares que lo eviten

Ejemplo: literales tipo byte (0-255)


[0-9](b|B) | [0-9][0-9](b|B) | [01][0-9][0-9](b|B) | 2[0-4][0-9](b|B) | 25[0-5](b|B)

62

Procesadores de lenguaje

Tema 2. Anlisis lxico

2.5 Implementacin de un analizador lxico

2.5.3 Tratamiento de errores Errores en las acciones asociadas :


Solucin recomendada:
Detectarlos antes de emitir el token

Emitir tokens de error lxico

Tratamiento en las herramientas automticas:


El anlisis lxico slo devuelve lexemas. Los lexemas se evalan a nivel sintctico o semntico

63

Procesadores de lenguaje

Tema 2. Anlisis lxico

2.5 Implementacin de un analizador lxico

2.5.4 Tratamiento de palabras reservadas Problema:


Se confunden con identificadores

Solucin (muy poco recomendable):


Modificar la expresin regular del identificador para evitarlo
Generar el AFD de la forma habitual

64

Procesadores de lenguaje

Tema 2. Anlisis lxico

2.5 Implementacin de un analizador lxico

2.5.4 Tratamiento de palabras reservadas Ejemplo: (identificador y class)

NO RECOMENDABLE 3
l a

s
[a-rt-zA-Z]

6
[a-zA-Z]

emitir class

[a-rt-zA-Z]

[b-zA-Z]

2
c
[a-km-zA-Z]

emitir identificador emitir identificador emitir identificador emitir identificador

[abd-zA-Z]

1
[a-zA-Z]

emitir identificador

65

Procesadores de lenguaje

Tema 2. Anlisis lxico

2.5 Implementacin de un analizador lxico

2.5.4 Tratamiento de palabras reservadas Solucin:


Tratar las palabras reservadas como identificadores Almacenar todas las palabras reservadas en una tabla

Antes de emitir el identificador, buscar en la tabla


Si aparece en la tabla, emitir el token de la palabra reservada Si no aparece en la tabla, emitir el token de identificador

[a-zA-Z]

1
[a-zA-Z]

- buscar lexema - emitir identificador o - emitir palabra clave


66

Procesadores de lenguaje

Tema 2. Anlisis lxico

2.5 Implementacin de un analizador lxico

2.5.4 Tratamiento de palabras reservadas Solucin alternativa:


Utilizar Mquinas Discriminadoras No Deterministas

67

Procesadores de lenguaje

Tema 2. Anlisis lxico

2.5 Implementacin de un analizador lxico

2.5.5 Mquina discriminadora no determinista Funcionamiento:


Similar a las MDD Basadas en Autmatas Finitos No Deterministas

Creacin:
Paso 1: Ordenar las diferentes expresiones regulares Paso 2: Unir todas las expresiones regulares Paso 3: Generar el Autmata Finito No Determinista Paso 4: Aadir las acciones a los estados finales

68

Procesadores de lenguaje

Tema 2. Anlisis lxico

2.5 Implementacin de un analizador lxico

2.5.5 Mquina discriminadora no determinista Ejemplo (Paso 1):


categora class int long double identificador blanco eof Expresin regular class int long double [a-zA-Z][a-zA-Z0-9]* [ \t\n][ \t\n]* eof

69

Procesadores de lenguaje

Tema 2. Anlisis lxico

2.5 Implementacin de un analizador lxico

2.5.5 Mquina discriminadora no determinista Ejemplo (Paso 2):

Expresin regular

class|int | long | double

|[a-zA-Z][a-zA-Z0-9]*| [ \t\n][ \t\n]*| eof

70

Procesadores de lenguaje

Tema 2. Anlisis lxico

2.5 Implementacin de un analizador lxico

2.5.5 Mquina discriminadora no determinista Ejemplo (Paso 3):

1
c i l

l n o o

2 7 10 14
19 20

a t n u

3 8 11 15

4 12 16

6 9 13
d

g b

17

18

[a-zA-Z] eof [ \t\n]

[a-zA-Z] [ \t\n]

21

71

Procesadores de lenguaje

Tema 2. Anlisis lxico

2.5 Implementacin de un analizador lxico

2.5.5 Mquina discriminadora no determinista Ejemplo (Paso 4):

1
c i l

l n o o

2 7 10 14
19 20

a t n u

3 8 11 15

4 12 16

emitir class emitir integer

6 9 13
d

g b

emitir long l

17

18

emitir double

[a-zA-Z] eof [ \t\n]

[a-zA-Z] [ \t\n] emitir identificador omitir emitir EOF


72

21

Procesadores de lenguaje

Tema 2. Anlisis lxico

2.5 Implementacin de un analizador lxico

2.5.5 Mquina discriminadora no determinista Funcionamiento:


Inicialmente la mquina se encuentra en el estado 0. Evoluciona como un AFN hasta encontrar un carcter no

reconocido (estrategia avariciosa).


Retrocede hasta la ltima transicin que contuviera al menos un estado final. Si encuentra varios estados finales, selecciona el primero en el orden establecido en el paso 1. Ejecuta las acciones asociadas al estado final seleccionado. Vuelve al estado inicial.

73

Procesadores de lenguaje

Tema 2. Anlisis lxico

2.5 Implementacin de un analizador lxico

2.5.5 Mquina discriminadora no determinista


La mayora de herramientas automticas se basan en mquinas discriminadoras no deterministas Utilizan el orden de declaracin de las expresiones regulares para resolver los conflictos entre estados finales Las palabras reservadas se declaran antes del token identificador (lo que resuelve el conflicto entre palabras reservadas e identificadores) Se suele introducir una ltima expresin regular que acepta cualquier carcter y que identifica al token de error lxico (de esta manera se evita que se aborte al encontrar un error lxico) Slo utiliza las acciones emitir token y omitir (skip).

74

Procesadores de lenguaje

Tema 2. Anlisis lxico

2.5 Implementacin de un analizador lxico

2.5.5 Mquina discriminadora no determinista Ejemplo: JavaCC

SKIP : { " " | "\r" | "\n" | "\t" | <SINGLE_LINE_COMMENT: "//" (~["\n","\r"])* ("\n"|"\r"|"\r\n")> | <MULTI_LINE_COMMENT: "/*" (~["*"])* "*" ("*" | (~["*","/"] (~["*"])* "*"))* "/">
}

75

Procesadores de lenguaje

Tema 2. Anlisis lxico

2.5 Implementacin de un analizador lxico

2.5.5 Mquina discriminadora no determinista Ejemplo: JavaCC

TOKEN : /* palabras clave */ { <CLASS: "class"> | <INTEGER: "int"> | <LONG: "long"> | <DOUBLE: "double"> } TOKEN: /* identificador */ { <ID : ["a"-"z","A"-"Z","_"] (["a"-"z","A"-"Z","0"-"9","_"])* > }

76

Procesadores de lenguaje

Das könnte Ihnen auch gefallen