Anda di halaman 1dari 42

TEORA DE

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.

En algunos compiladores, el analizador lxico se encarga de hacer una copia del


programa fuente en el que estn marcados los mensajes de error.
En algunas ocasiones, los analizadores lxicos se dividen en una cascada de dos
fases, la primera llamada examen, y la segunda anlisis lxico. El examinador se
encarga de realizar tareas sencillas, mientras que el analizador lxico es el que
realiza las operaciones ms complejas.
5

Funciones del explorador


Las funciones principales que deber realizar el explorador son las siguientes:
La ms importante es la formacin y la entrega al parser de los tokens. Estos
tokens que entrega formarn los terminales del analizador sintctico.
Manejar el fichero del programa fuente, es decir, abrirlo, a continuacin leer
sus caracteres y cerrarlo.
El explorar los literales, por ejemplo los literales o tiras alfabticas, los nmeros
flotantes, enteros, etc.
Listar el programa fuente llegando en algn caso a llevar el control exacto de
cada carcter ledo para sealar el carcter ofensivo en caso de un error.
Manejar las macros (expansin del texto fuente) de una manera
independiente, en general del compilador.

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

Descripcin Informal del patrn


const
if
< o <= o = o <> o > o >=
Letra seguida de letras y/o dgitos
Cualquier constante numrica
Cualquier carcter entre

En la mayora de los lenguajes de programacin, se consideran componentes


lxicos las siguientes construcciones: palabras clave, operadores,
identificadores, constantes, cadenas literales y signos de puntuacin como
parntesis, coma y punto y coma.
En el ejemplo anterior, cuando la secuencia de caracteres pi aparece en el
programa fuente, se devuelve al analizador sintctico un componente lxico
que representa un identificador.
La devolucin de un componente lxico a menudo se realiza mediante el paso
de un nmero entero correspondiente al componente lxico. Este entero es al
que hace referencia el id.

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.

El patrn para el componente lxico relacin es el conjunto de los seis


operadores relacionales de pascal.
Para la descripcin de patrones para componentes lxicos ms
complejos, como id(para identificador) y num(para nmero). Se utilizar
con mayor precisin, la notacin de expresiones regulares.

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

if x1>3 then a:=b+x1


Existen una serie de palabras clave (reservadas) en muchos lenguajes que
conviene introducir directamente en la tabla de smbolos:
Tokens

Lexemas

if

if

id

x1,a,b

relacin

>

op

asign

:=

then

Then

num

13

14

Identifique los lexemas que forman los componentes


lxicos :

15

Atributos de los Componentes


Lxicos
Cuando concuerda con un lexema ms de un patrn, el analizador
lxico debe proporcionar informacin adicional sobre el lexema
concreto que concord con las siguientes fases del compilador.
El analizador lxico recoge informacin sobre los componentes lxicos
en sus atributos asociados. Los componentes lxicos influyen en las
decisiones del analizador sintctico, y los atributos, en la traduccin de
los componentes lxicos.

En la prctica, los componentes lxicos suelen tener un solo atributo


un apuntador a la entrada de la tabla de smbolos donde se guarda la
informacin sobre el componente lxico; el apuntador se convierte en
el atributo del componente lxico.

16

Ejemplo: Los componentes lxicos y los valores de


atributos asociados para la proposicin de FORTRAN:
E=M*C**2
Se escriben a continuacin como una secuencia de parejas:
<id, apuntador a la entrada de la tabla de smbolos para E>
<op_asign,>

<id, apuntador a la entrada de la tabla de smbolos para M>


<op_mult,>

<id, apuntador a la entrada de la tabla de smbolos para C>


<op_exp,>
<id, apuntador a la entrada de la tabla de smbolos para C>

<num, valor entero 2>


17

Los atributos de los identificadores se pueden guardar en la tabla de


smbolos. Los otros se pueden guardar en otra tabla o devolverlos junto al
token.
Obsrvese que en ciertas parejas no se necesita un valor de atributo; el
primer componente es suficiente para identificar el lexema.
El compilador puede almacenar la cadena de caracteres que forma un
nmero en una tabla de smbolos y dejar que el atributo del componente
num sea un apuntador a la entrada de la tabla(valor entero).

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)

Gramtica Lineal (regular)


S::= aR | ... | zR | AR | ... | ZR
R::= aR | ... | zR | AR | ... | ZR | 0R | ... | 9R |

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

Utilizando un generador de Analizadores Lxicos (LEX)


Ms cmodo

Consejo: Ordenar las reglas/transiciones de acuerdo a la frecuencia


de utilizacin

28

Programacin de un
Analizador Lxico

29

30

31

Implementacin con Tablas compactas


A)

TABLA COMPACTA

Supongamos que tenemos el autmata que reconoce el lenguaje regular


L={dda$, abnca$| n>=0}
Caracteres de entrada

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

a) Valores no nulos de M y sus


columnas.

b) Tabla para localizacin de los


elementos no nulos.

Como medida de la reduccin alcanzada, si M tuviera 100x100


elementos con solo 110 elementos no nulos, se tendra de esta forma
2+(100+110)=420 elementos almacenados en total en vez de los
10,000 originales.
34

M(2,3)?

PRIFIL(2)=3

FIL=2, esto significa que los elementos 3 y 4 de VALOR contienen las


transiciones del estado 2, de los dos el que tiene valor COL=3 tiene una
transicin a 3.
Otra forma de programar un analizador lxico es creando una tabla hash con el
autmata.

35

En cada iteracin, se lee un carcter de la entrada y se transita a un


estado dependiendo de la tabla de transiciones. Si el autmata es
determinista, slo habr una transicin posible para cada smbolo de
entrada y no hace falta retroceso.

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.

Realmente realiza una Traduccin.


El explorador realiza comprobaciones en la tabla de smbolos.
Las acciones semnticas ms comunes son:

AADIR: concatena caracteres para construir smbolos.


LEECAR: lee caracteres de la entrada.
VER: Comprueba si un identificador est o no en la TdS.
ADD: Aade un identificador a la TdS.

41

Analizador Lxico y Lenguajes


de Programacin
El AL agrupa caracteres para formar tokens, por tanto es importante definir el
delimitador : Carcter que delimita el token sin pertenecer a l.
Otro concepto importante es el de palabra reservada. El lenguaje prohbe el
uso libre al programador de determinadas palabras que tienen un significado
especfico y nico en el lenguaje.

Se pueden clasificar los lenguajes de programacin por el uso de los


delimitadores y palabras reservadas:
Delimitadores blancos con palabras reservadas.
Caso ms sencillo de lenguaje (PASCAL, COBOL)

Delimitadores blancos sin palabras reservadas


PL/I

Blancos se ignoran sin palabras reservadas


El tipo ms difcil de lenguaje, aparecen ambigedades (FORTRAN)

Blancos se ignoran con palabras reservadas


42

Anda mungkin juga menyukai