Você está na página 1de 14

UNIVERSIDAD JOS ANTONIO PEZ

TRADUCTORES E INTERPRETADORES

Unidad II

Analizador lxico
Parte I

1 de 14

Analizador lxico
Introduccin
El diseo a mano de un analizador lxico comienza por un diagrama u otra descripcin
de los lexemas de cada token.
As se puede escribir cdigo para identificar cada ocurrencia de cada lexema en la
entrada y devolver la informacin acerca del token.
Se puede crear de forma automtica, especificando los patrones de los lexemas a un
generador de analizadores lxicos.
Esta manera agiliza la modificacin de nuestro analizador debido a que se reescriben
solo los patrones y no todo el cdigo.

2 de 14

Analizador lxico
Funcin del analizador lxico
La principal tarea del analizador lxico es leer los caracteres de entrada del programa
fuente, agruparlos en lexemas y producir como salida una secuencia de tokens para
cada lexema en el programa fuente.
El flujo de tokens es enviado al analizador sintctico para su anlisis.
El analizador lxico interacta con la tabla de smbolos. Cuando el analizador lxico
encuentra un lexema que constituye a un identificador, debe introducir ese lexema en
la tabla de smbolos.
En algunos casos, el analizador lxico puede leer la informacin relacionada con el tipo
de informacin de la tabla de smbolos, como una ayuda para determinar el token
apropiado que debe pasar al analizador sintctico.

3 de 14

Analizador lxico
Funcin del analizador lxico

La interaccin se implementa haciendo que el analizador sintctico llame al analizador


lxico.
obtenerSiguienteToken hace que el analizador lxico lea los caracteres de la entrada,
halle una incidencia y produzca un lexema para el siguiente token, el que devuelve al
analizador semntico.
4 de 14

Analizador lxico
Funcin del analizador lxico
El analizador realiza otras tareas adicionales a identificar los lexemas.
Una es eliminar los comentarios y espacios en blanco dentro de la entrada.
Otra de las tareas es correlacionar los mensajes de error generados por el compilador
con el programa fuente.
Los analizadores lxicos pueden dividirse en una cascada de dos procesos:
a) Escaneo: consiste en los procesos simples que no requieren la determinacin de
tokens de la entrada.
b) Anlisis lxico: un escaneo que produce la secuencia de tokens.

5 de 14

Analizador lxico
Comparacin entre anlisis lxico y sintctico
Existen razones para dividir el anlisis lxico del parsing:
1. Sencillez en el diseo, simplificacin de al menos una de las fases.
2. Mejorar la eficiencia del compilador. Un analizador lxico por separado permite
aplicar tcnicas especializadas que sirven solo para la tarea lxica.
3. Mejora la portabilidad del compilador.

6 de 14

Analizador lxico
Tokens, patrones y lexemas
Token: Un par que consiste en un nombre y un valor de atributo opcional. Representa
un tipo de unidad lxica, como una palabra clave o una secuencia que denotan un
identificador. Los nombre son los smbolos de entrada que procesa el analizador
sintctico.

Patrn: Una descripcin de la forma que pueden tomar los lexemas de un token. Es
solo la secuencia de caracteres que forman la palabra clave. Es una estructura ms
compleja que se relaciona mediante muchas cadenas.
Lexema: Una secuencia de caracteres en el programa fuente que coincide con el
patrn de un token y que el analizador lxico identifica como una instancia de ese
token.

7 de 14

Analizador lxico
Tokens, patrones y lexemas

En la mayora de los lenguajes de programacin, la siguientes clases cubren la mayora


de los tokens:
1. Un token para cada palabra clave.
2. Los tokens para los operadores.
3. Un token para los identificadores.
4. Uno o ms tokens para las constantes.
5. Tokens para cada signo de puntuacin.

8 de 14

Analizador lxico
Atributos para los tokens
Cuando ms de un lexema puede coincidir con un patrn, el analizador lxico debe
proporcionar a las subsiguientes fases del compilador informacin adicional sobre el
lexema especfico que coincidi.
Es muy importante para el generador de cdigo saber qu lexema se encontr en el
programa fuente. Es por esto que el analizador lxico le devuelve al sintctico, adems
del nombre del token, un valor de atributo que describe al lexema de ese token.
Mientras el nombre influye en el anlisis sintctico, el valor del atributo influye en la
traduccin de los tokens despus de este anlisis.
Mucha de la informacin atribuida a los lexemas es almacenada en la tabla de
smbolos.

9 de 14

Analizador lxico
Errores lxicos
El analizador lxico requiere de todos los componentes para conocer si existe un error
en el programa fuente.
Cuando el anlisis lxico no encuentra una coincidencia para una determinada palabra
reservada, puede considerarlo como un lexema asignado a un identificador, y dejar
que otra fase de la compilacin se encargue de arrojar el error correspondiente.
Suponiendo que no se pueda encontrar una coincidencia en ninguno de los tokens, ya
que ninguno de los patrones coincide con el prefijo del resto de la entrada. Se recurre
a una tcnica de recuperacin llamada modo de pnico.
Se eliminan caracteres sucesivos de la entrada hasta encontrar un token que coincida
con el principio de lo que ha quedado de la entrada.

10 de 14

Analizador lxico
Errores lxicos
Otras posibles tcnicas de recuperacin pueden ser:
1. Eliminar un carcter del resto de la entrada.
2. Insertar un carcter faltante en el resto de la entrada.
3. Sustituir un carcter por otro.
4. Transponer dos caracteres adyacentes.

Estas transformaciones se prueban en un intento por reparar la entrada.

Existe un mtodo para intentar reparar la entrada en solamente lexemas vlidos, pero
requiere de un costo muy elevado.

11 de 14

Analizador lxico
Buffer en la entrada
Existen formas de agilizar la simple pero importante tarea de leer el programa fuente.
Se dificulta en el momento en el que debemos buscar uno o ms caracteres ms all
del siguiente lexema para encontrar el lexema correcto.

Debido al tiempo requerido para procesar la entrada, se han desarrollado tcnicas


especializadas del uso de bferes para reducir la sobrecarga en el procesamiento de un
solo carcter de entrada.
Existe un esquema de dos bferes que se encarga de las lecturas extensas sin
problemas.

12 de 14

Analizador lxico
Buffer en la entrada

Cada bfer es del mismo tamao N, el tamaa de un bloque de disco (4096 bytes).
Mediante el comando de lectura de un sistema, se leen N caracteres y se colocan en
un bfer.
Si quedan menos de N caracteres en la entrada, entonces el carcter especial
representado por eof marca el final de la entrada y es distinto a cualquiera de los
posibles caracteres del programa fuente.

El apuntador inicioLexema marca el inicio del lexema actual el cual se desea


conocer la extensin.
El apuntador avance explora por adelantado en busca de una coincidencia en el
patrn.
13 de 14

Analizador lxico
Buffer en la entrada

Cuando se determina el siguiente lexema, avance se coloca en el carcter que se


encuentra en su extremo derecho. Cuando el lexema se registra como un valor de
atributo de un token devuelto al analizador sintctico, inicioLexema se coloca en el
carcter que va justo despus del carcter que acabamos de encontrar.
Para adelantar a avance, se comprueba si se ha llegado al final de alguno de los dos
bferes. De ser as, se recarga el otro bfer de entrada, se mueve a avance al principio
del bfer recin cargado.

Siempre que no haya que alejarse a una distancia superior a la suma de N ms la


distancia ya alejada, no hay riesgo de sobrescribir el bfer de entrada.

14 de 14

Você também pode gostar