Compiladores / Guía IV / Ciclo 02

1
Compiladores / Guía IV / Ciclo 02 - 2016
Centro de Investigación y
Transferencia de Tecnología
Analizador Léxico - Lex
Facultad: Ingeniería
Escuela: Computación
Asignatura: Compiladores
Contenido
En la presente práctica se estudia la utilidad de otra herramienta para generar tablas de símbolos, las cuales están
compuestas por cada token perteneciente a un lenguaje de programación. Cabe mencionar que profundizamos en este
estudio debido a la complejidad del analizador sintáctico que se estudiará en una posterior práctica.
Objetivos Específicos

Construir analizadores léxicos haciendo uso de la herramienta FLEX.
Material y Equipo



Guía de laboratorio N° 4.
Máquina Virtual Linux, distribución Bodhi.
LXTerminal y Flex.
Introducción Teórica
Introducción
La herramienta conocida como Lex, o Flex en una implementación más reciente, que nos permite generar un analizador
léxico mediante la especificación de expresiones regulares para describir patrones de los tokens. La notación de entrada
para la herramienta Lex se conoce como el lenguaje Lex. La herramienta en sí es el compilador Lex.
El compilador Lex transforma los patrones de entrada en un diagrama de transición y genera el código del analizador
lexicográfico.
Visión General
Las reglas de reconocimiento son de la forma:
p1 {acción1}
p2 {acción2}
... ...
pn {acción}
Donde p1 es una expresión regular y acción1 es un fragmento de programa que describe cuál ha de ser la acción del
analizador léxico cuando se encuentra con un lexema que encaja con p1. En Lex, las acciones se escriben en C.
Un programa en Lex tiene la siguiente forma:
declaraciones
%%
reglas
%%
código de usuario
2
Compiladores / Guía IV / Ciclo 02 - 2016
Donde las declaraciones y las subrutinas de usuario a menudo se omiten. El segundo %% es opcional, pero el primero es
obligatorio para marcar el comienzo de las reglas. El programa mínimo absoluto en Lex es, entonces,
%%
(no hay definiciones, no hay reglas) que se traduce en un programa que copia la entrada a la salida sin cambios.
Patrones
Funciones y Variables Predefinidas por LEX
3
Compiladores / Guía IV / Ciclo 02 - 2016
Procedimiento
Instalando entorno Linux Bodhi.
1. Abra el VirtualBox, en el menú archivo seleccione la opción “importar servicio virtualizado” y buscar el archivo
“Bodhi.ova”, el cual se encuentra ubicado en la unidad D (en la máquina en que se ha elaborado la guía,
Bodhi.ova estaba en otra ubicación). Así podremos cargar la máquina virtual.
2. Si en algún momento se le solicita una clave, se puede utilizar la súper clave 123456.
Una vez iniciado utilizaremos las herramientas de (1) LXTerminal (ubicada en el menú Aplicaciones->accesorios, la cual
utilizaremos para compilar y (2) File Manager que utilizaremos para el manejo de los archivos para la práctica.
Cuando iniciemos las dos herramientas debemos recordar: el File Manager mostrará la carpeta home/bodhi que es la
carpeta principal de los archivos; y en la LXTerminal al abrirla se estará trabajando en esta dirección por lo que cuando
naveguemos por las carpetas en la terminal debemos considerar eso.
Ejemplo 1.
1. Comenzaremos por crear la carpeta para el primer ejemplo.
Desde la ventana de File Manager Clic derecho  Create New  Folder.
4
Compiladores / Guía IV / Ciclo 02 - 2016
Verificando la creación del Folder:
2. Dentro de esta carpeta, se crean dos archivos:
 El primero será el que contendrá el texto a analizar [.txt].
 El segundo archivo será nuestro analizador léxico.
Creando el archivo con el texto a analizar:
3. Dentro de la carpeta “ejemplo1” creamos un archivo en blanco, el cual tendrá como nombre “hola.txt”.
4. Abrimos el archivo con doble clic y digitamos el texto siguiente:
En informática, un programa Hola mundo es el que imprime el texto «¡Hola Mundo!» en un dispositivo de visualización, en
la mayoría de los casos una pantalla de monitor.
El Hola mundo se caracteriza por su sencillez, especialmente cuando se ejecuta en una interfaz de línea de comandos.
El programa Hola mundo también puede ser útil como prueba de configuración para asegurar que el compilador, el entorno
de desarrollo y el entorno de ejecución estén instalados correctamente y funcionando.
En los sistemas basados en microcontroladores empleados para el aprendizaje, se suele considerar "Hola mundo" al
programa que permite poner en modo intermitente un led. El programa consiste en mandar alternativamente un nivel alto
y uno bajo por uno de los puertos del sistema, dando a cada uno de dichos niveles un valor de retardo.
5. Una vez agregado el texto guardamos los cambios y cerramos la ventana de edición.
5
Compiladores / Guía IV / Ciclo 02 - 2016
Creando el código fuente para el analizador léxico:
6. De igual forma como creamos el archivo de texto plano creamos uno con el nombre de hola.lex la extensión nos
indicará que es nuestro analizador.
7. Una vez agregado, guardar el código fuente.
Pasos para compilar y analizar
Para compilar el analizador léxico no es muy diferente como se ha hecho hasta el momento para compilar los códigos
fuentes haciendo uso de línea de comando. En este caso la terminal LXTerminal.
1. Buscar la carpeta en la que se encuentra el archivo a compilar, haciendo uso del comando cd. Recordemos que
estamos en la raíz de la carpeta cuando inicia la terminal. Para ingresar a la carpeta se hace lo siguiente:
2. Una vez en la carpeta, procedemos a compilar, así:
6
Compiladores / Guía IV / Ciclo 02 - 2016
Como se puede observar, se puede leer el fichero de texto.
Ejemplo 2.
Analizador léxico que identifica palabras o números dentro de una sentencia, haciendo uso de expresiones regulares
básicas.
Crearemos una carpeta llamada Ejemplo2 y ahí tendremos los siguientes archivos.
NOTA: Los archivos .out y .c son los que se generan a la hora de la compilación.
7
Compiladores / Guía IV / Ciclo 02 - 2016
Ahora, se muestra otra forma de poder compilar y analizar nuestro programa:
Ejercicios propuestos:
Escribir un fuente Flex que lea un fichero de texto, realice las siguientes acciones y presente los resultados por pantalla.
1. Contar el número de secuencias de caracteres escritas completamente en mayúsculas.
2. Contar el número de secuencias de caracteres escritas completamente en minúsculas.
Investigación Complementaria
1.
2.
3.
4.
5.
Contar el número de secuencias de caracteres que mezclen mayúsculas y minúsculas.
Contar el número de números enteros.
Contar el número de números reales.
Calcular la suma de todos los números enteros encontrados.
Calcular la suma de todos los números reales encontrados.
Bibliografía

Manuel Alfonseca Moreno, Marina de la Cruz Echeandía, Alfonso Ortega de la Puente, Estrella Pulido Cañabate,
Compiladores: Teoría y Práctica, Pearson Educación, S.A., Madrid, 2006