Vous êtes sur la page 1sur 13

El proceso del Anlisis Lxico

El proceso de anlisis lxico se refiere al trabajo que realiza el scanner


con relacin al proceso de compilacin.
El scanner representa una interfaz entre el programa fuente y el
analizador sintctico o parser.
El scanner, a travs del examen carcter por carcter del texto, separa el
programa fuente en piezas llamadas tokens, los cuales representan los
nombres de las variables, operadores, etiquetas, y todo lo que
comprende el programa fuente.
El parser, usualmente genera un rbol de sintaxis del programa fuente
como ha sido definido por una gramtica.
Las hojas del rbol son smbolos terminales de la gramtica. Son esos
smbolos terminales o tokens los que el scanner extrae del cdigo fuente
y se los pasa al parser.
Es posible para el parser usar el conjunto de caracteres terminales del
lenguaje como el conjunto de tokens, pero ya que los tokens pueden ser
definidos en trminos de gramticas regulares ms simples que en las
gramticas ms complejas utilizadas por los parsers, es deseable usar
scanners.
Usar solo parsers es costoso en trminos de tiempo de ejecucin y
requerimientos de memoria, y la complejidad y el tiempo de ejecucin
puede reducirse con el uso de un scanner.
La separacin entre anlisis lxico (scanning) y anlisis sintctico
(parsing) puede tener tambin otras ventajas.
El anlisis lxico de caracteres generalmente es lento en los
compiladores, y separndolo del componente de anlisis semntico de la
compilacin, el nfasis particular puede darse para hacer ms eficiente el
proceso.
Un analizador de lxico tiene como funcin principal el tomar secuencias
de caracteres o smbolos del alfabeto del lenguaje y ubicarlas dentro de
categoras, conocidas como unidades de lxico.

Las unidades de lxico son empleadas por el analizador gramatical para


determinar si lo escrito en el programa fuente es correcto o no
gramaticalmente.
Algunas de las unidades de lxico no son empleadas por el analizador
gramatical sino que son descartadas o filtradas.
Tal es el caso de los comentarios, que documentan el programa pero que
no tienen un uso gramatical, o los espacios en blanco, que sirven para
dar legibilidad a lo escrito.
En la terminologa empleada en la construccin de un analizador de
lxico se encuentran los siguientes trminos.
Patrn Representa la regla para que una secuencia de caracteres sea
considerada cierta unidad de lxico.
Ejemplo: El patrn para un identificador de Pascal es:
Una letra seguida por letras, dgitos o guiones (_)

Lexema
El valor actual de un conjunto de caracteres que satisfacen un patrn.
Ejemplo: Este_es_1_ejemplo
Este es el lexema que satisface el patrn de un identificador
Token o Ficha
El valor asociado a una categora o unidad de lxico.
Se representa como un nmero entero o una constante de un byte.
Ejemplo: el token de un identificador puede ser 1 id (si id fue definida como
1). Unidades de lxico

Categoras en que se clasifican las cadenas de caracteres vlidos en un lenguaje.

Los caracteres vlidos reciben el nombre de alfabeto.


Por ejemplo, el alfabeto de Pascal es:
A-Z, a-z, 0-9, _, =, :, ;, ,, , -, ', ", *, /, (, ), [, ], ., <, > y las unidades de lxico para
pascal son:
identificadores
literales numricas
operadores aritmticos
cadenas de caracteres
separadores
operadores relacionales
operadores lgicos
comentarios
Con respecto al lenguaje para controlar al ROBOT, tenemos que su alfabeto es:
n,o,r,t,e,s, ,u,i,c
y las unidades de lxico son:
rdenes
(norte, sur, este, oeste, inicio)
y espacios en blanco.

El rol del analizador de Lxico


Aunque el analizador de lxico es la primera etapa del proceso de compilacin,
no es quien lo inicia.
Pudiera considerarse que el analizador de lxico hace su procesamiento y enva
sus resultados al analizador gramatical, como secuencialmente se aprecia en el
proceso de compilacin; no es as:
La compilacin empieza con el analizador gramatical quien solicita un token
para realizar su trabajo;
el analizador de lxico reune smbolos y enva el token correspondiente a la
unidad de lxico que conform al analizador gramatical y espera una nueva
solicitud de token.
Como se aprecia en la figura siguiente, el analizador de lxico est supeditado
por el analizador gramatical.

Durante estas etapas se tiene comunicacin con la tabla de smbolos que


concentra informacin de las entidades empleadas en el programa.
Descripcin de Patrones
Un patrn se puede describir:
1. Mediante una descripcin informal, en donde se emplea el lenguaje natural
para describir el comportamiento de la regla de lxico.
Por ejemplo: un nmero entero es una secuencia de uno o ms dgitos del 0
al 9.
O un identificador es una letra seguida de letras, dgitos o guiones de
subrayar.
La descripcin informal es til slo entre humanos;

computacionalmente an no hay herramientas para construir sobre ellas


analizadores de lxico.
2. Utilizando expresiones regulares.
Una expresin regular es una notacin formal que utiliza operaciones sobre el
alfabeto de un lenguaje.
Por ejemplo, se puede definir que un identificador es:
{letra} ({letra} | {dgito} | {guin})*
que interpreta como un elemento del conjunto letra seguido de cero o mas
veces (la cerradura Kleene, representada por el asterisco)
de una letra, dgito o guin (la seleccin representada por la barra vertical).
Esta notacin es formal y computacionalmente til para construir analizadores
de lxico empleando la herramienta LEX.
3. Utilizando autmatas finitos (diagramas de transicin o diagramas
sintcticos), que son representaciones grficas de las relaciones entre conjuntos
de smbolos (aristas) por medio de estados, a los cuales pueden llegarse o
transitarse por ellos al encontrar un smbolo perteneciente a un conjunto.
El siguiente diagrama puede ser la representacin de un identificador:
La utilizacin del diagrama sirve para aclarar las posibilidades de accin en un
patrn y puede manipularse computacionalmente.

Diagramas de Estado.
Ya que el scanner debe reconocer tokens, debemos buscar la posibilidad de
describir los tokens a manera de reconocimiento y no de manera generativa.

La descripcin de los tokens por medio de cmo pueden ser reconocidos (o


aceptados) se hace en trminos de un modelo matemtico llamado un aceptor
de estado finito.
En lo que resta de esta seccin, describiremos un conjunto de tokens por medio
de la especificacin de un aceptor que reconocer ese conjunto.
Cabe aclarar que las gramticas regulares tambin pueden utilizarse para este
propsito.
Un aceptor de estado finito o autmata finito puede considerarse como una
mquina consistente de una cabeza de lectura y una caja de control de estado
finito.
La mquina lee una cinta de carcter a la vez, de izquierda a derecha.
Existe un nmero finito de estados que la mquina puede adoptar.
Cada vez que la mquina lee el siguiente carcter, ocurre en ella un cambio de
estado.
Siempre que un aceptor de estado finito inicia la lectura de una cinta, ste se
encuentra en cierto estado llamado estado inicial.
Algunos de los estados que el aceptor puede adoptar se llaman estados finales,
y si el aceptor intenta leer ms all del final de la cinta mientras se encuentra en
un estado final, la cadena que est en la cinta se dice que fue aceptada por el
autmata finito.
En otras palabras, la cadena pertenece al lenguaje que es aceptado por el
autmata finito.

Diagramas de Estado Finito.


Para representar grficamente un aceptor de estado finito, tambin se utilizan
los diagramas de estado finito o diagramas de transicin, como el que se

muestra en la siguiente figura y que representa el aceptor para un nmero con


al menos un dgito despus del punto decimal.
Los nodos del diagrama de estado finito representan los estados del aceptor de
estado finito.
En el diagrama anterior, los nodos se han etiquetado con los nmeros 1, 2 y 3.
Los arcos, que van de un estado otro, indican las transiciones de estado.
La flecha y la palabra "Inicio" indican cual de los estados es el estado inicial (en
este caso el estado 1).
El estado etiquetado con el 3 se denomina estado final.
Generalmente los estados finales se representan por medio de dos crculos
concntricos, pero en nuestro caso, para facilitar su construccin, hemos
utilizado un circulo con lnea ms gruesa.
Los smbolos sobre los arcos representan los caracteres que, al leerse, obligan al
cambio de un estado a otro.

Un diagrama de transicin es una representacin grfica donde se tiene un


conjunto de estados, los cuales pueden ser:
iniciales
finales
intermedios
los cuales pueden tener una o ms salidas hacia otro estado.

Los estados se relacionan entre s con flechas con un nombre (el caracter o
conjunto de caracteres que provoca la transicin de un estado a otro).
Un estado final se representa con :

que tambin recibe el nombre de estado de aceptacin.


Para construir un diagrama de transicin se debe tener presente:
A cada estado debe llegarse con el mismo conjunto de caracteres en todas las
ocasiones en que haya un transicin.
Para llegar a un estado de aceptacin debe existir una transicin sobre el
caracter que rompe el patrn de la unidad de lxico.
Cuando se construye un analizador de lxico utilizando diagramas de transicin
para la especificacin de los patrones, se realiza un nico diagrama que, a partir
del estado 0, tiene diversas transiciones a cada uno de los patrones de las
unidades de lxico que deba reconocer.
Cada patrn posee un caracter selector, que permite reconocer de manera
nica el patrn que deba aplicarse.
Por ejemplo, si queremos reconocer identificadores, comentarios apegados a
las reglas del lenguaje C y el fin de archivo, podriamos contruir el siguiente
diagrama:

Si leo la diapositiva siguiente puedo entender este grafico CLARO..

Las descripciones informales de las unidades de lxico son:


Identificador: Letra seguida de letra, dgitos o guiones
Comentario: Empieza con /* y termina con */.
Entre estos pares puede haber cualquier smbolo
EOF: cuando se encuentra el caracter eof (fin de archivo)
Error: Cualquier smbolo que no cumpla con los patrones anteriores.
Los caracteres selectores para cada patrn son:
Identificador: letra
Comentario: /
EOF: eof
Error: cualquier smbolo diferente a los anteriores.
Las descripciones informales de las unidades de lxico son:
Identificador: Letra seguida de letra, dgitos o guiones
Comentario: Empieza con /* y termina con */.
Entre estos pares puede haber cualquier smbolo
EOF: cuando se encuentra el caracter eof (fin de archivo)
Error: Cualquier smbolo que no cumpla con los patrones anteriores.
Los caracteres selectores para cada patrn son:
Identificador: letra
Comentario: /
EOF: eof
Error: cualquier smbolo diferente a los anteriores.

Estado

A-Z

0-9

eof

otro

13

13

13

12

13

14

14

14

14

14

14

15

10

10

10

15

10

15

11

11

11

11

11

11

11

10

15

11
12
13
14
15

Los estados finales o de aceptacin de las unidades de lxico quedan sin


informacin en las columnas ya que no existe una transicin al reconocer o aceptar
el patrn.
Note que la designacin de otro corresponde a los smbolos diferentes a los
expresamente indicados y que para cada patrn es contextual.
Para poder realizar el anlisis de lxico a partir de la informacin que contiene la
tabla se cuenta con un mecanismo que parte del estado 0 y empieza a recorrer el
diagrama por cada transicin posible hasta llegar a un estado final.

El algoritmo del mecanismo se describe a continuacin.


Analizador_de_Lexico
INICIO
Estado=0
C=Inspecciona()
Cont=0
Nuevo_Estado=TABLA[Estado, C]
MIENTRAS Nuevo_Estado no sea Estado_Final
REPITE
Avanza()
C=Inspecciona()
Estado=Nuevo_Estado
Nuevo_Estado=TABLA[Estado, C]
Cont=Cont+1

FREPITE
SI Cont es 0 ENTONCES
Avanza()
FSI
Regresa Token (Estado_Nuevo)
FIN
Analizador_de_Lexico
INICIO
Estado=0
C=Inspecciona()
Cont=0
Nuevo_Estado=TABLA[Estado, C]
MIENTRAS Nuevo_Estado no sea Estado_Final
REPITE
Avanza()
C=Inspecciona()
Estado=Nuevo_Estado
Nuevo_Estado=TABLA[Estado, C]
Cont=Cont+1
FREPITE
SI Cont es 0 ENTONCES
Avanza()
FSI

Regresa Token (Estado_Nuevo)


FIN

Si no entiendes el diagrama, entonces en una hoja de papel realizas la 1, 2,


3pruebas de escritorio CLARO..
La funcin Analizador_de_Lxico utiliza dos funicones que permiten consumir los
smbolos del programa fuente: Inspecciona y Avanza. Las funciones consideran la
existencia de un apuntador AP que direcciona al caracter prximo a leer.
Inspecciona regresa el caracter apuntado por AP pero no lo incrementa. La funcin
Avanza no regresa nada pero incrementa el valor de AP para estar en el siguiente
smbolo a leer.

Vous aimerez peut-être aussi