UNIDAD IV
Funcin del Analizador Lxico
Leer los caracteres de entrada y elaborar como salida una secuencia de componentes
lxicos que utiliza el analizador sintctico para hacer el anlisis.
El analizador 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. Esta interaccin, suele aplicarse convirtiendo al analizador lxico en una
subrutina o corrutina del analizador sintctico. Recibida la orden "obtn el siguiente
componente lxico" del analizador sintctico, el analizador lxico lee los caracteres de
entrada hasta que pueda identificar el siguiente componente lxico.
Funciones secundarias.
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 espacios en blanco en forma de caracteres de
espacio en blanco, caracteres TAB y de lnea nueva. Otra funcin es relacionar os
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 se pueda asociar un nmero de lnea con un mensaje de error.
En algunos compiladores, el analizador lxico se encarga de hacer una copia del
programa fuente en el que estn marcados los mensajes de error. Si el lenguaje fuente
es la base de algunas funciones de pre procesamiento de macros, entonces esas
funciones del preprocesador tambin se pueden aplicar al hacer el anlisis lxico.
Componentes Lxicos, Patrones y Lexemas
Hay varias operaciones importantes que se pueden aplicar a los lenguajes. Para el
Expresiones Regulares
En Pascal, un identificador es una letra seguida de cero o ms letras o dgitos; es
decir, un identificador es un miembro del conjunto de todas las cadenas de letras y
dgitos que comienzan con una letra.
Con esta notacin, se pueden definir los identificadores de Pascal como
letra ( letra | dgito ) *
La barra vertical aqu significa "o", los parntesis se usan para agrupar sub-
expresiones, el asterisco significa "cero o ms casos de" la expresin entre
parntesis, y la yuxtaposicin de letra con el resto de la expresin significa
concatenacin.
Una expresin regular se construye a partir de expresiones regulares ms simples
utilizando un conjunto de reglas definitorias. Cada expresin regular r representa un
lenguaje L(r). Las reglas de definicin especifican cmo se forma L(r) combinando de
varias maneras los lenguajes representados por las subexpresiones de r.
Las siguientes son las reglas que definen las expresiones regulares del alfabeto .
Asociada a cada regla hay una especificacin del lenguaje representado por la
expresin regular que se est definiendo.
es una expresin regular designada por {}; es decir, el conjunto que contiene la
cadena vaca.
Si a es un smbolo de , entonces a es una expresin regular designada por {a}; por
ejemplo, el conjunto que contiene la cadena a. Aunque se usa la misma notacin
para las tres, tcnicamente, la expresin regular a es distinta de la cadena a o del
smbolo a. El contexto aclarar si se habla de a como expresin regular, cadena o
smbolo.
Se dice que un lenguaje designado por una expresin regular es un conjunto
regular. La especificacin de una expresin regular es un ejemplo de definicin
recursiva. Las reglas 1 y 2 son la base de la definicin; se usa el trmino smbolo
bsico para referirse a o a un smbolo de que aparezcan en una expresin
regular. La regla 3 proporciona el paso inductivo.
Se pueden evitar los parntesis innecesarios en las expresiones regulares si se
adoptan las convenciones:
El operador unario * tiene la mayor precedencia y es asociativo por la izquierda,
La concatenacin tiene la segunda mayor precedencia y es asociativa por la
izquierda,
| tiene la menor precedencia y es asociativo por la izquierda.
Segn estas convenciones, (a)| ((b)*(c)) es equivalente a a|b*c. Estas dos
expresiones designan el conjunto de cadenas que tienen una sola a, o cero o ms b
seguidas de una c.
Definiciones Regulares
Por conveniencia de notacin, puede ser deseable dar nombres a las
expresiones regulares y definir expresiones regulares utilizando dichos
nombres como si fueran smbolos. Si es un alfabeto de smbolos bsicos,
entonces una definicin regular es una secuencia de definiciones de la forma
d1->r1
d2->r2
dn->rn
donde cada d1 es un nombre distinto, y cada r1 es una expresin regular
sobre los smbolos de U {d1, d2, , d1_1}, por ejemplo, los smbolos
bsicos y los nombres previamente definidos. Al limitar cada r1 a los smbolos
de y a los nombres previamente definidos, se puede construir una
expresin regular en para cualquier r1, reemplazando una y otra vez los
nombres de las expresiones regulares por las expresiones que designan. Si r1
utilizara d para alguna j i, entonces ri se podra definir recursivamente y
este proceso de sustitucin no tendra fin.
Para distinguir los nombres de los smbolos, se imprimen en negritas los
nombres de las definiciones regulares.
Reconocimiento de los Componentes Lxicos
En esta seccin, se estudia el reconocimiento de los componentes lxicos y se utiliza
como ejemplo el lenguaje generado por la siguiente gramtica.
prop -> if expr then prop
| if expr then prop else prop
|
expr -> trmino oprel trmino
| trmino
trmino -> id
| nm
donde los terminales if, then, else, oprel, id y nm generan conjuntos de cadenas
dados por las siguientes definiciones regulares:
if -> if
then -> then
else -> else
oprel -> < | <= | = | <> | > | >=
id -> letra ( letra | digito )*
nm-> digito+( . dgito+)? (E( + | - )? dgito+ .. )?
donde letra y dgito se han definido anteriormente.
Para este fragmento de lenguaje, el analizador lxico reconocer las palabras clave if,
then, else, al igual que los lexemas representados por oprel, id y nm. Para simplificar
las cosas, se supone que las palabras clave son reservadas; es decir, no se pueden
usar como identificadores, nm representa los nmeros enteros y reales sin signo de
Pascal.
Adems, se supone que los lexemas estn separados por espacio en blanco, formados
por secuencias no nulas de espacios en blanco, caracteres TAB y caracteres de nueva
lnea. El analizador lxico eliminar los espacios en blanco. Esto lo har comparando
una cadena con la definicin de la expresin regular eb siguiente.
delim -> blanco | tab | lineanueva
eb -> delim+
Si se encuentra una concordancia para eb, el analizador lxico no devuelve un
componente lxico al analizador sintctico, sino que se dispone a encontrar un
componente lxico a continuacin del espacio en blanco y lo devuelve al analizador
El objetivo es construir un analizador lxico que aisl el lexema para el siguiente
sintctico.
componente Lxico del buffer de entrada y que produzca como salida un par
formado por el componente lxico apropiado y el valor de atributo, utilizando la
tabla de traduccin mostrada a continuacin. Los valores de atributo para los
operadores relacionales estn dados por las constantes simblicas MEN, MEI, IGU,
MAY, MAI.
Diagrama de Transiciones
Como paso intermedio en la construccin de un analizador lxico, primero se produce
un diagrama de flujo estilizado, llamado diagrama de transiciones. Los diagramas de
transiciones representan las acciones que tienen lugar cuando el analizador lxico es
llamado por el analizador sintctico para obtener el siguiente componente lxico.
Se utiliza un diagrama de transicin para localizar la informacin sobre los caracteres
que se detectan a medida que el apuntador delantero examina la entrada. Esto se
hace cambiando de posicin en el diagrama segn se leen los caracteres.
Las posiciones en un diagrama de transicin se representan con un crculo y se llaman
estados. Los estados se conectan mediante flechas, llamadas aristas. Las aristas que
salen del estado s tienen etiquetas que indican los caracteres de entrada que pueden
aparecer despus de haber llegado el diagrama de transicin al estado s. La etiqueta
otro se refiere a todo carcter que no haya sido indicado por ninguna de las otras
aristas que salen de s. Un estado se etiqueta como el estado de inicio; es en el estado
inicial del diagrama de transicin donde reside el control cuando se empieza a
reconocer un componente lxico. Ciertos estados pueden tener acciones que se
ejecutan cuando el flujo del control alcanza dicho estado. Al entrar en un estado se lee
el siguiente carcter de entrada. Si hay una arista del estado en curso de ejecucin
cuya etiqueta concuerde con ese carcter de entrada, entonces se va al estado
apuntado por la arista. De otro modo, se indica un fallo.
En la figura se muestra un diagrama de transiciones para los patrones >= y >. El
diagrama de transiciones funciona de la siguiente forma. Su estado de inicio es el
estado 0. En el estado 0 se lee el siguiente carcter de entrada. La arista etiquetada
con >del estado O se debe seguir hasta el estado 6 si este carcter de entrada es >.
De otro modo, significa que no se habr reconocido ni > ni >=.
Anlisis Lxico
https://www.youtube.com/watch?v=pPrBE_czrVc
https://www.youtube.com/watch?v=idnS9MTwfOU
Autmatas
https://www.youtube.com/watch?v=pfJSqvQFOxI
Autmata Finito Determinista
https://www.youtube.com/watch?v=pk17OhAoAOM
https://www.youtube.com/watch?v=P0AxQvJcN2Q