LENGUAJES
ANLISIS LXICO
ING. LAURA BAZN DAZ
ANLISIS LXICO
Es la primera fase de un compilador. Su principal funcin consiste en
leer los caracteres de entrada y elaborar como salida una secuencia
de componentes lxicos que utiliza el analizador sintctico para hacer
el anlisis.
El explorador, analizador lexicogrfico o scanner es la parte del
compilador que lee los caracteres del programa fuente y que
construye unos smbolos intermedios que llamaremos tokens, por
ejemplo: las variables, los enteros, palabras reservadas y los
delimitadores (+, -, *, etc.).
ANLISIS LXICO
INTERACCIN DE UN
ANALIZADOR LXICO CON
EL ANALIZADOR
SINTCTICO
FUNCIONES
Como el analizador lxico es la parte del compilador que lee el texto fuente,
tambin puede realizar ciertas funciones secundarias en la interfaz del usuario,
como eliminar del programa fuente comentarios y delimitadores(espacios en
blanco, smbolos de puntuacin, fin de lnea).
Relacionar los mensajes de error del compilador con el programa fuente. Por
ejemplo, el analizador lxico puede tener localizado el nmero de caracteres de
nueva lnea detectados, de modo que pueda asociar un nmero de lnea con un
mensaje de error.
Introducir los identificadores en la tabla de smbolos.
COMPONENTES LXICOS
Cuando se menciona el analizador sintctico, los trminos componente
lxico - token, patrn y lexema se emplean con significados
especficos.
Un token es un smbolo terminal de la gramtica del analizador sintctico.
En general, hay un conjunto de cadenas en la entrada para el cual se
produce como salida el mismo componente lxico.
Un token se describe mediante un patrn.
Este conjunto de cadenas se describe mediante una regla llamada PATRN
asociado al COMPONENTE LXICO.
Se dice que el patrn CONCUERDA con cada cadena del conjunto.
Lexema
Es una secuencia de caracteres en el programa fuente con la que concuerda
el patrn para un componente lxico.
En cont pi = 3.1416;
La subcadena pi es un lexema para el componente lxico identificador.
Los componentes lxicos se tratan como smbolos terminales de la
gramtica del lenguaje fuente, con nombres en negritas para
representarlos.
Los lexemas para el componente lxico que concuerdan con el patrn
representan cadenas de caracteres en el programa fuente que se pueden
tratar juntos como unidad lxica.
Componente lxico
CONST
IF
relacin
id
nm
literal
Lexemas de
ejemplo
const
if
<,<=,=,<>,>,>=
pi, cuenta, D2
3.1416, 0, 6.02E23
vaciado de memoria
10
Patrn
Un patrn es una regla que describe el conjunto de lexemas que pueden
representar a un determinado componente lxico en los programa
fuente.
11
DO 5 I = 1.25
En la proposicin no se puede saber hasta ver el punto decimal si DO es una
palabra clave o es ms bien parte del identificador DO5I.
Por otro lado en la proposicin Do 5 I = 1,25 hay 7 componentes lxicos, que
corresponde a la palabra clave DO, la etiqueta de la proposicin 5, el
identificador I, el operador =, la constante 1, la coma y la constante 25. Aqu
no se puede estar seguro hasta encontrar la coma si DO es una palabra clave.
En muchos lenguajes, ciertas cadenas son RESERVADAS, es decir, su significado
est predefinido y el usuario no lo puede modificar. Si las palabras clave no son
reservadas, entonces el analizador lxico debe distinguir entre una palabra
clave y un identificador definido por el usuario.
12
Lexemas
if
if
id
x1,a,b
relacin
>
op
asign
:=
then
Then
num
13
14
15
16
18
Errores Lxicos
Hay pocos detectables por el analizador lxico
Detectables
Nmero de caracteres de los identificadores
Caracteres ilegales
Otros (si el lenguaje no admite .5 en lugar de 0.5)...
Programa con K errores: hacen falta K cambios para poder ser correcto
No se suelen utilizar las acciones de correccin de errores por ser muy
costosas
19
Errores Lxicos
Acciones posibles
Borrar un carcter
Insertar un carcter
Reemplazar un carcter
Intercambiar dos caracteres
20
Errores Lxicos
Son pocos los errores que se pueden detectar simplemente en el nivel lxico
porque un analizado lxico tiene una visin muy restringida de un programa
fuente. Si aparece la cadena fi por primera vez en un programa en C en el
contexto:
fi (a == f(x) )
Un analizador lxico no puede distinguir si fi es un error de escritura de la
palabra clave if o si es un identificador de funcin no declarado. Como fi es
un identificador vlido, el analizador lxico debe devolver el componente
lxico de un identificador y dejar que alguna otra fase del compilador se
ocupe de los errores.
21
Errores Lxicos
Pero supngase que surge una situacin en la que el analizador lxico no
puede continuar porque ninguno de los patrones concuerda con un prefijo
de la estrada restante. Tal vez la estrategia de recuperacin ms sencilla sea
la recuperacin en modo de pnico.
Se borran caracteres sucesivos de la entrada restante hasta que el
analizador lxico pueda encontrar un componente lxico bien formado.
Esta tcnica de recuperacin puede confundir en ocasiones al analizador
sintctico, pero en un ambiente de computacin interactivo puede resultar
bastante adecuada.
22
Representacin del
Analizador Lxico
Expresin Regular:
(a|..|z|A|..|Z) (a|..|z|A|..|Z)*
Autmata finito (diagrama o tabla de transicin)
23
24
25
26
Implementacin de un
Analizador Lxico
Utilizando un lenguaje de alto nivel
Programacin
Tablas compactas
Hashing
Autmata programado
27
Implementacin de un
Analizador Lxico
Utilizando ensamblador
Ms eficiente
Ms difcil
28
Programacin de un
Analizador Lxico
29
30
31
TABLA COMPACTA
b
c
2
d
d
5
6
ESTADOS
a) Diagrama de estados
b) Matriz de transicin M
32
Tabla compacta
Con el fin de ahorrar memoria en el ordenador se pueden guardar slo los
elementos no nulos de la matriz de transicin M en un vector VALOR,
numerndolos con un ndice, que en el ejemplo va de 1 a 7. Luego se aade
una columna adicional COL indicando en qu columna estaba el elemento no
nulo correspondiente de VALOR.
Finalmente se crea otra tabla con los datos siguientes:
Dnde est el primer VALOR de cada lnea (PRIFIL).
Nmero de elementos (no nulos) de VALOR para esa lnea (NUMFIL).
33
Tablas compactas
Nm. del
elemento
VALOR
COL
Nm. de la
fila
PRIFIL
NUMFIL
M(2,3)?
PRIFIL(2)=3
35
36
HASHING
Tcnica muy simple de proceder, considerando como clave de hashing la
concatenacin formada por los dos valores de la fila y columna del
elemento no nulo de la matriz (si no est almacenado, su valor es nulo).
AUTMATA PROGRAMADO
Consiste en representar directamente con un programa al autmata en
cuestin. Este mtodo puede ser muy rpido si el ordenador dispone de
alguna instruccin para determinar si un carcter pertenece a un
conjunto dado.
37
38
39
40
Acciones Semnticas
El autmata no debe mostrar nicamente si o no.
41