Professional Documents
Culture Documents
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
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
2.1 Introduccin
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
2.1 Introduccin
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
2.1 Introduccin
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
2.1 Introduccin
Smbolos especiales:
Separadores, delimitadores, terminadores, etc. ( { , }, [ , ] , ( , ) , ; , , )
Procesadores de lenguaje
2.1 Introduccin
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
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
10
Procesadores de lenguaje
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
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
Procesadores de lenguaje
14
Procesadores de lenguaje
15
Procesadores de lenguaje
~[0-9] = cualquier carcter excepto un dgito (el smbolo ~ significa caracteres excluidos) ~[] = cualquier carcter
16
Procesadores de lenguaje
17
Procesadores de lenguaje
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
19
Procesadores de lenguaje
20
Procesadores de lenguaje
A
a l
Arco:
Estado final:
A
[a-z] ~[+]
Arcos agrupados:
21
Procesadores de lenguaje
A
1
B
1
C
1
2
b
0
l
4
22
Procesadores de lenguaje
Procesadores de lenguaje
24
Procesadores de lenguaje
Procesadores de lenguaje
26
Procesadores de lenguaje
AFN
F
27
Procesadores de lenguaje
Expresin regular a:
f
28
Procesadores de lenguaje
Expresin regular r | s:
l s
i
l
f
l
l
29
Procesadores de lenguaje
30
Procesadores de lenguaje
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
32
Procesadores de lenguaje
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
Procesadores de lenguaje
35
Procesadores de lenguaje
2
l
3
l l a b b l
10
37
Procesadores de lenguaje
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
C
b a
a a
b a
D
a
39
Procesadores de lenguaje
2 opcin:
Generar el AFD directamente a partir de la expresin regular
40
Procesadores de lenguaje
Procesadores de lenguaje
.[a-z][0-9]
[a-z].[0-9]
[a-z][0-9].
42
Procesadores de lenguaje
[0-9]
(.[a-z])*[0-9], ([a-z])*.[0-9]
([a-z])*[0-9].
43
Procesadores de lenguaje
44
Procesadores de lenguaje
t(a|alo|r.e)n n
t(a|alo|re).n o
Procesadores de lenguaje
Procesadores de lenguaje
Procesadores de lenguaje
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
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
Procesadores de lenguaje
El tiempo de anlisis:
en un AFD es de orden O(n)
Procesadores de lenguaje
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
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
Procesadores de lenguaje
54
Procesadores de lenguaje
55
Procesadores de lenguaje
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
1
[0-9] : .
2
= .
4 6
[a-zA-Z]
5 7
[a-zA-Z]
8
[ \t\n] eof [ \t\n]
9 10
Procesadores de lenguaje
58
Procesadores de lenguaje
Tratamiento:
Generar un error lxico. Devolver los caracteres ledos. Eliminar el primer carcter. Continuar el anlisis.
59
Procesadores de lenguaje
60
Procesadores de lenguaje
61
Procesadores de lenguaje
Solucin no recomendada:
Utilizar expresiones regulares que lo eviten
62
Procesadores de lenguaje
63
Procesadores de lenguaje
64
Procesadores de lenguaje
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]
[abd-zA-Z]
1
[a-zA-Z]
emitir identificador
65
Procesadores de lenguaje
[a-zA-Z]
1
[a-zA-Z]
Procesadores de lenguaje
67
Procesadores de lenguaje
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
69
Procesadores de lenguaje
Expresin regular
70
Procesadores de lenguaje
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] [ \t\n]
21
71
Procesadores de lenguaje
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
emitir long l
17
18
emitir double
21
Procesadores de lenguaje
73
Procesadores de lenguaje
74
Procesadores de lenguaje
SKIP : { " " | "\r" | "\n" | "\t" | <SINGLE_LINE_COMMENT: "//" (~["\n","\r"])* ("\n"|"\r"|"\r\n")> | <MULTI_LINE_COMMENT: "/*" (~["*"])* "*" ("*" | (~["*","/"] (~["*"])* "*"))* "/">
}
75
Procesadores de lenguaje
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