Está en la página 1de 13

ndice

Introduccin ...................................................................................................................................1
5.1 Funciones del analizador lxico..........................................................................................2
5.2 Componentes lxicos, patrones y lexemas ........................................................................5
5.3 Creacin de Tabla de tokens ..............................................................................................6
5.4 Errores lxicos ....................................................................................................................7
5.5 Generadores de analizadores lxicos ................................................................................8
5.6 Aplicaciones (Caso de estudio) ..........................................................................................10
Conclusin .....................................................................................................................................11
Referencias bibliogrficas.............................................................................................................12

Introduccin
En este trabajo de investigacin se realizar un anlisis sobre los conceptos bsicos del anlisis
lxico.

La fase del anlisis lxico de un compilador agrupa secuencia de caracteres en categoras. Aunque
esto se conoce tambin como rastreo, realmente podemos distinguir dos tareas separadas:
Un rastreador mueve un apuntador a travs de la entrada un carcter a la vez para hallar cadenas
continuas de caracteres, las cuales constituyen elementos textuales individuales (palabras), y
clasificadas cada una de acuerdo con su tipo.
El filtro descarta algunos de los tokens encontrados por el rastreador determina cules otros son
smbolos reservados (y coloca el texto de los restantes en la tabla de nombre.
Existe una gran variedad de generadores de analizadores lxico, uno de los generadores ms
conocidos es Lex, es un generador de analizadores lxicos para el s istema operativo UNIX basada en
expresiones regulares que genera cdigo C.

Anlisis lxico
La fase de rastreo (scanner), tiene las funciones de leer el programa fuente como un archivo de
caracteres y dividirlo en tokens. Los tokens son las palabras reservadas de un lenguaje, secuencia de
caracteres que representa una unidad de informacin en el programa fuente. En cada caso un token
representa un cierto patrn de caracteres que el analizador lxico reconoce, o ajusta desde el inicio
de los caracteres de entrada. De tal manera es necesario generar un mecanismo computacional que
nos permita identificar el patrn de transicin entre los caracteres de entrada, generando tokens,
que posteriormente sern clasificados. Este mecanismo es posible crearlo a partir de un tipo
especfico de mquina de estados llamado autmata finito.

5.1 Funciones del analizador lxico


Es la primera fase de un compilador. Su principal funcin consiste en leer la secuencia de caracteres
del programa fuente, carcter a carcter, y elaborar como salida la secuencia de componentes
lxicos que utiliza el analizador sintctico. El analizador sintctico emite la orden al analizador lxico
para que agrupe los caracteres y forme unidades con significado propio llamados componentes
lxicos (tokens). Los componentes lxicos representan:

Palabras reservadas: if, while, do,

Identificadores: variables, funciones, tipos definidos por el usuario, etiquetas,

Operadores: =, >, <, >=, <=, +, *,

Smbolos especiales: ;, ( ), { },

Constantes numricas. Literales que representan valores enteros y flotantes.

Constantes de carcter: Literales que representan cadenas de caracteres.

El analizador lxico opera bajo peticin del analizador sintctico devolviendo un componente lxico
conforme el analizador sintctico lo va necesitando para avanzar en la gramtica. Los componentes
lxicos son los smbolos terminales de la gramtica. Suele implementarse como una subrutina del

analizador sintctico. Cuando recibe la orden obtn el siguiente componente lxico, el analizador
lxico lee los caracteres de entrada hasta identificar el siguiente componente lxico.

Adems el analizador lxico es responsable de:


o Manejo de apertura y cierre de archivo, lectura de caracteres y gestin de posibles errores
de apertura.
o Eliminar comentarios, espacios en blanco, tabuladores y saltos de lnea.
o Inclusin de archivos y macros.
o Contabilizar nmero de lneas y columnas para emitir mensajes de error.

Una de las ventajas de separar el anlisis lxico y anlisis sintctico es que fa cilita la
transportabilidad del traductor si se decide realizar cambios posteriores, por ejemplo cambiar
las etiquetas begin-end por llaves de apertura y cierre { }.

Las funciones de un analizador lxico pueden ser laS siguientes:


Leer los caracteres de la entrada.
Generar una secuencia de componentes lxicos. (TOKENS).
Eliminar comentarios, delimitadores (espacios, smbolos de puntuacin, fin de la lnea).
Relacionar los mensajes de error con las lneas del programa fuente.
Introducir los identificadores en la tabla de smbolos.

Este lee la secuencia de caracteres del programa fuente, carcter a carcter, y los agrupa para formar
unidades con significado propio, los componentes lxicos. Estos componentes lxicos representan:

Palabras reservadas if, while, do,

Identificadores: asociados a variables, nombres de funciones, tipos definidos por el usuario,


etiquetas, por ejemplo: posicin, velocidad, tiempo,

Operadores: = * + - / == > < & =

Smbolos especiales: ; () [] {}

Constantes numricas: literales que representan valores enteros, en coma flotante, etc, 982,
0xf678, -83.2E+2

Constantes de caracteres: literales que representan cadenas concretas de caracteres, hola


mundo,

Estas seran funciones secundarias de un analizador lxico:

Manejo del fichero de entrada del programa fuente: abrirlo, leer sus caracteres, cerrarlo y
gestionar posibles errores de lectura.

Eliminar comentarios, espacios en blanco, tabuladores y saltos de lnea (caracteres no vlidos


para formar un token). Inclusin de ficheros: # include

La expansin de macros y funciones inline: # define

Contabilizar el nmero de lneas y columnas para emitir mensajes de error.

Reconocimiento y ejecucin de las directivas de compilacin (por ejemplo, para depurar u


optimizar el cdigo fuente).

Ventajas de separar el anlisis lxico y el anlisis sintctico:

Facilita transportabilidad del traductor (por ejemplo, si decidimos en un momento dado


cambiar las palabras reservadas begin y end de inicio y fin de bloque, por f y g, solo hay que
cambiar este mdulo.

Se simplifica el diseo: el analizador es un objeto con el que se interacta mediante ciertos


mtodos. Se localiza en un nico modulo la lectura fsica de los caracteres, por lo que facilita
tratamientos especializados de E/S.

5.2 Componentes lxicos, patrones y lexemas


En la fase de anlisis, los trminos componentes lxicos (token), patrn y lexema se emplean con
significados especficos. Un analizador lxico, inicialmente lee los lexemas y le asigna un significado
propio.

Componente lxico es la secuencia lgica y coherente de caracteres relativo a una categora:


identificador, palabra reservada, literales (cadena/numrica), operador o carcter de
puntuacin, adems de que un componente lxico puede tener uno o varios lexemas.

Patrn es una regla que genera la secuencia de caracteres que puede representar a un
determinado componente lxico (expresin regular).

Lexema es una cadena de caracteres que concuerda con un patrn que describe un
componente lxico (valor de cadena).
Ejemplo de una cadena de cdigo: const pi = 3.1416;

El analizador lxico recoge informacin sobre los componentes lxicos en sus atributos asociados.
Los tokens influyen en las decisiones del anlisis sintctico, y los atributos, en la traduccin de los
tokens. En la prctica los componentes lxicos suelen tener solo un atributo.
Para efectos de diagnstico, puede considerarse tanto el lexema para un identificador como el
nmero de lnea en el que se encontr por primera vez. Esta informacin puede ser almacenada en
la tabla de smbolos para el identificador (estructura de datos).

5.3 Creacin de Tabla de tokens


El analizador lxico, tambin conocido como scanner, lee los caracteres del programa fuente, uno a
uno, desde el chero de entrada y va formando grupos de caracteres con alguna relacin entre s
(tokens). Cada token es tratado como una nica entidad, constituyendo la entrada de la siguiente
fase del compilador. Existen diferentes tipos de tokens y a cada uno se le puede asociar un tipo y, en
algunos casos, un valor. Los tokens se pueden agrupar en dos categoras:
Cadenas especicas, como las palabras reservadas (if, while, ...), signos de puntuacin (., ,, =, ...),
operadores aritmticos (+,*, ...) y lgicos (AND, OR, ...), e tc. Habitualmente, las cadenas es pecicas
no tienen asociado ningn valor, slo su tipo.
Cadenas no especicas, como los identicadores o las constantes numricas o de texto. Las cadenas
no especicas siempre tienen tipo y valor. Por ejemplo, si dato es el nombre de una variable, el tipo
del token ser identicador y su valor ser dato. A la tabla de Tokens tambin se la llama tabla de
nombres o tabla de identificadores y tiene dos funciones principales:
Efectuar chequeos semnticos.
Generacin de cdigo.
Permanece slo en tiempo de compilacin, no de ejecucin, excepto en aquellos casos en que se
compila con opciones de depuracin. La tabla almacena la informacin que en cada momento se
necesita sobre las variables del programa, informacin tal como:
nombre, tipo, direccin de localizacin, tamao, etc.
La gestin de la tabla de smbolos es muy importante, ya que consume gran parte del tiempo de
compilacin. De ah que su eficiencia sea crtica. Aunque tambin sirve para guardar informacin
referente a los tipos creados por el usuario, tipos enumerados y, en general, a cualquier identificador
creado por el usuario.
Una tabla de smbolos puede conceptualizarse como una serie de renglones, cada uno de los cuales
contiene una lista de valores de atributos que son asociados con una variable en particular. Las clases
de los atributos que aparecen en una tabla de smbolos dependen en algn grado de la naturaleza
del lenguaje de programacin para el cual se escribe el compilador. La organizacin de la tabla

variar dependiendo de las limitaciones de memoria y tiempo de acceso. Una tabla de smbolo
provee la siguiente informacin:

Da un identificador.

Que informacin es asociada con un nombre.

Como se asocia esa informacin con un nombre.

Como acceder esta informacin.

Pero las dos funciones importantes que realizan las tablas de smbolos (tambin llamadas tablas de
identificadores y tablas de nombres), en el proceso de traduccin son:
o verificar que la semntica sea correcta
o ayudar en la generacin apropiada de cdigo.

Cuando construir la tabla de smbolos y cuando interactuar con ella


El punto del procesador de traduccin en el cual son invocadas las rutinas de manejo de la tabla de
smbolos depende primeramente del nmero y la naturaleza de los pasos del compilador.
En un compilador multipasos, la tabla de smbolos es creada durante el paso de anlisis lxico. Por
medio de un ndice se entra a la tabla de smbolos para ubicar la variable, a partir del token
generado por el scanner.

5.4 Errores lxicos


Son pocos los errores simplemente en el nivel lxico ya que tiene una visin muy restringida de un
programa fuente. El analizador lxico debe devolver el componente lxico de un identificador y dejar
a otra fase se ocupe de los errores.
Suponiendo que una situacin en la cual el analizador lxico no puede continuar por que ninguno de
los patrones concuerda con un prefijo de la entrada. Tal vez la estrategia de recuperacin ms
sencilla sea recuperacin EN MODO PNICO (este mtodo de recuperacin es donde se borra

caracteres sucesivos de la entrada hasta que el analizador lxico pueda encontrar un componente
lxico bien formado). Los programas no siempre son correctos!
El compilador tiene que realizar lo siguiente:
1. Reportar clara y exactamente la presencia de errores
2. Recuperarse de cada error lo suficientemente rpido para poder detectar errores
subsiguientes:

Tratar de evitar mensajes falsos de error

Un error que produce un token errneo

Errores lxicos posibles

5.5 Generadores de analizadores lxicos


Todos los analizadores lxicos realizan la misma funcin (se implementan de igual forma) excepto
en los tokens que reconocen, las expresiones regulares que los definen. Resulta entonces natural y
una forma de ahorrar esfuerzo, utilizar generadores automticos de analizadores lxicos. Estos
generadores solo necesitan conocer la especificacin de tokens a reconocer.
Los analizadores lxicos (el AFD) se pueden implementar a mano para reconocer los componentes
lxicos de un determinado lenguaje. Este opcin tiene sentido solo cuando el aprender a utilizar una
determinada herramienta nos llevara ms tiempo que el hacerlo nosotros a mano. Originalmente,
esta era la forma habitual, pues los realizados a mano eran ms rpidos que los generados por las
herramientas automticas (basados en tablas). (el proceso de anlisis lxico conlleva la mayor parte
del tiempo del proceso de compilacin). Las ultimas herramientas con las tcnicas de compresin
de tablas son ms eficientes.
Flex (Fast Lexical Analyzer Generator) es un generador automtico de analizadores lxicos en
lenguaje C. Es software de GNU.

Entrada: un fichero texto con la especificacin de los componentes lxicos, las expresiones
regulares que los definen.

Salida: un programa en C que implementa dicho analizador, preparado para ser compilado y
utilizado.

Un fichero Lex consiste de tres partes: definiciones, reglas y rutinas auxiliares, separadas por % %.

La seccin de definiciones incluye declaraciones de variables, constantes y definiciones regulares


que pudieran ser utilizadas ms adelante.
La seccin de reglas describe cada patrn y cada accin es un fragmento de cdigo que indica la
accin que se debe realizar cuando se encuentra dicho patrn.
La seccin de cdigo auxiliar contienen las funciones que pueden ser llamadas por las acciones de
la seccin de reglas. Algunas consideraciones:

Cualquier cdigo C que se desea insertar va comprendido entre %{ y %}.

Flex hace correspondencia siempre con la cadena ms larga.

Si se verifican dos patrones, se elige la regla que aparece primero (colocar las palabras
reservadas antes que los identificadores).

Para definir las expresiones regulares se utiliza los smbolos:

Existen los siguientes nombres internos:

5.6 Aplicaciones (Caso de Estudio)


Adems de para construir compiladores e intrpretes, los analizadores lxicos se pueden emplear
para muchos programas \convencionales". Los ejemplos ms claros son aquellos programas que
tienen algn tipo de entrada de texto donde hay un formato razonablemente libre en cuantos
espacios y comentarios. En estos casos es bastante engorroso controlar donde empieza y termina
cada componente y es fcil liarse con los punteros a char. Un analizador lxico simplifica
notablemente la interfaz y si se dispone de un generador automtico, el problema se resuelve en
pocas lneas de cdigo.

10

Conclusin

El analizador lxico tiene varias funciones importantes, se encarga de la eliminacin de los espacios
en blanco de cualquier cadena que analiza, reconoce los identificadores y palabras claves y
contantes. Posteriormente se encarga de construir los lexemas que constituyen un lenguaje de
programacin.
Las funciones en general de un anlisis lxico es leer el programa fuente como un archivo de
caracteres y dividirlo en tokens. Los tokens son palabras reservadas de un lenguaje, secuencia de
caracteres que representa una unidad de informacin en el programa fuente.

11

Referencias bibliogrficas

Hopcroft John E., Introduccin a la Teora de Autmatas, Lenguajes y Computacin, 2da ed, Ed.
Addison Wesley, 2004.
Kenneth C. Louden. (2004). Construccin de compiladores: principios y prctica. Mxico: Thomson.
Mndez, J. (2011) Unidad III y IV Lenguajes y Autmatas i. Documento en lnea. Consultado el 19
de noviembre de 2016 en: https://es.scribd.com/doc/226694899/Unidad-III-y-IV-Lenguajes -yAutomatas-i
Rosario, K. (2009) Anlisis Lxico. Documento en lnea. Consultado el 19 de noviembre de 2016 en:
http://automatas-finitos.blogspot.mx/2009/12/clasificacion.html

12