Práctica 3

Anuncio
UNIVERSIDAD DEL ISTMO
Ingeniería en computación
Compiladores
PROFESOR
M. en C. J. Jesús Arellano Pimentel
NÚMERO DE PRÁCTICA
3
NOMBRE DE LA PRÁCTICA
Construcción de un sencillo analizador léxico.
OBJETIVO GENERAL
Construir un sencillo analizador léxico empleando Flex y
Microsoft Visual Studio Express 2012 para escritorio.
-
OBJETIVOS ESPECÍFICOS
EQUIPO REQUERIDO
SOFTWARE REQUERIDO
Crear una especificación Flex para contar los
caracteres y líneas de texto en un archivo de texto
plano.
- Instalar el Flex para compilar la especificación.
- Compilar en el Visual Studio el código generado por
Flex para así obtener finalmente un sencillo
analizador léxico.
Computadora personal con 512 MB de RAM mínimo.
- Windows 7/8
- Microsoft Visual Studio Express 2012 para escritorio
de Windows.
- Flex
1.- Fundamentos.
1.1.- Flex
Flex es un una herramienta que permite generar analizadores léxicos. A partir de un conjunto
de expresiones regulares, Flex busca concordancias en un fichero de entrada y ejecuta
acciones asociadas a estas expresiones. Es compatible casi al 100% con Lex, una herramienta
clásica de Unix para la generación de analizadores léxicos, pero es un desarrollo diferente
realizado por GNU bajo licencia GPL.
2.- Desarrollo
2.1 Instalar el Flex.
Paso 1 Descargar e instalar una versión de Flex para Windows.
La versión a utilizar en esta práctica es la 2.5.4a. se puede encontrar en Internet
buscando el archivo flex-2.5.4a-1-bin.zip. La instalación consiste simplemente en
descomprimir el archivo .zip, con ello se generará el sistema de archivos de la Figura 1.
En dicha figura se puede observar una carpeta con el nombre de bin, en ésta carpeta
quedará el ejecutable del Flex.
Ingeniería en Computación
M. C. J. Jesús Arellano Pimentel
1
Figura 1. Carpetas contenidas en el archivo flex-2.5.4a-1-bin.zip.
Paso 2 Crear la especificación Flex.
La especificación Flex debe permitir contar cada uno de los caracteres y líneas que
conformen cualquier archivo de texto plano, dicha especificación es la siguiente:
%{
#include<stdlib.h>
#include<stdio.h>
#include<string.h>
int num_lin = 0, num_car = 0;
%}
%%
[\n]
num_lin++;
.
num_car++;
%%
int yywrap()
{
return 1;
}
int main()
{
yylex();
printf("Numero de lineas %d\n",num_lin);
printf("Numero de caracteres %d\n",num_car);
return 0;
}
Utilizando la aplicación de Notepad de Windows editamos la especificación anterior.
Es importante que al guardarla seleccionemos en Tipo de documento “Todos los
archivos”, en lugar de “Documentos de texto *.txt”, de esta forma es posible guardar el
archivo con extensión .l (punto ele). Se sugiere que el nombre del archivo sea EjeLex1.l
y que se guarde en la misma ruta donde se tiene el archivo flex.exe en la carpeta bin.
Paso 3 Compilar la especificación guardada en el archivo EjeLex1.l con flex.
Para compilar la especificación .l se debe abrir la consola de comandos y cambiarse a
la ruta donde previamente se descomprimió el archivo Flex.exe, que es el mismo lugar
donde debe encontrarse el archivo EjeLex1.l. El comando de compilación puede verse
en la Figura 2. La opción -o indica el nombre del archivo fuente a generar, en nuestro
caso el archivo se llamará EjeLex1.c.
Ingeniería en Computación
M. C. J. Jesús Arellano Pimentel
2
Figura 1. Carpetas contenidas en el archivo flex-2.5.4a-1-bin.zip.
Hecho lo anterior se debe crear una aplicación de consola en el Visual Studio Express
2012 para compilar el código generado por Flex.
2.2 Crear un Proyecto de aplicación de consola Win32 vacío.
Paso 1 Iniciar el MVS Express 2012.
Paso 2 Crear un nuevo proyecto Win32.
Seleccionar la opción del menú Archivo->Nuevo Proyecto. Del cuadro de diálogo
Nuevo proyecto en Plantillas seleccionar Visual C++ y Win32; en tipo de aplicación
seleccionar Aplicación de consola Win32 Visual C++. El nombre del proyecto o
solución podría ser EjeLex1. Presionar el botón Aceptar.
Paso 3 Configurar el Proyecto Actual.
En el Asistente para aplicaciones Win32 presionar el botón siguiente; después
seleccionar la casilla de verificación correspondiente a la opción adicional Proyecto
vacío, posteriormente deshabilitar la casilla de verificación de Comprobación del ciclo
de vida de desarrollo de seguridad(SDL); finalmente oprimir el botón Finalizar (ver
Figura 3).
Ingeniería en Computación
M. C. J. Jesús Arellano Pimentel
3
Figura 3. Configuración de la aplicación EjeLex1.
Paso 4 Adicionar al proyecto vacío el archivo generado por Flex.
Copiar el archivo generado por Flex a la ruta del proyecto generado por el MVS
Express 2012. En nuestro caso esta en:
\Documents\Visual Studio 2012\Projects\EjeLex1\EjeLex1
Una vez copiado el archivo, en la interfaz del MVC Express 2012 dar clic derecho
sobre el elemento Archivos de código fuente del Explorador de soluciones situado a la
izquierda, del menú que aparece seleccionar Agregar -> Elemento existente … (ver
Figura 4). Cuando aparezca el cuadro de diálogo para seleccionar el archivo se debe
elegir a el archivo copiado anteriormente, es decir: EjeLex1.c.
Figura 4. Adicionando un archivo de código fuente al proyecto vacío.
Paso 5 Compilar y ejecutar
Compilar oprimiendo la tecla F7. El resultado de la compilación puede producir
algunas advertencias, sin embargo se debe generar un ejecutable en la carpeta Debug
de la solución. Lo anterior es posible verificarlo en el sistema de archivos.
La ejecución se puede realizar de dos formas desde la consola de comandos de
Windows. La primera es simplemente ejecutando el archivo .exe generado tal como se
muestra en la Figura 5.
Ingeniería en Computación
M. C. J. Jesús Arellano Pimentel
4
Figura 5. Ejecución de la aplicación EjeLex1.exe.
Se puede observar en la Figura 5 que se tecleó un conjunto de 4 palabras en tres líneas,
pero en la última línea se oprimieron simultáneamente las teclas ctrl y z, lo que da
como resultado la visualización de ^Z, esto se utiliza para indicar el fin del flujo de
caracteres de entrada o el final del archivo de entrada.
La segunda forma de ejecución consiste en “pasarle” desde la línea de comandos el
archivo que el sencillo analizador léxico debe inspeccionar, esto se logra mediante la
ejecución, desde la consola de Windows, del archivo EjeLex1.exe con
redireccionamiento de la entrada (ver Figura 6).
Figura 5. Ejecución de la aplicación EjeLex1.exe con redireccionamiento de la entrada.
Observe que en la ejecución se empleó un archivo localizado en la misma ruta que el
ejecutable y además se utilizó el carácter < de la siguiente forma:
EjeLex1.exe < EjeLex1.ilk
Abriendo el archivo EjeLex1.ilk es posible comprobar que efectivamente cuenta con el
número de caracteres y líneas producidas como salida del análisis léxico.
Ingeniería en Computación
M. C. J. Jesús Arellano Pimentel
5
Descargar