Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Practica1 Uso de La Herramienta Flex-Lex
Practica1 Uso de La Herramienta Flex-Lex
División de Ingenierías
Campus Irapuato – Salamanca
Practica #1
Aprende a usar la herramienta Flex/Lex
Integrantes:
Francisco Javier González Ornelas
Jesús Alonso Hernández Santoyo
Joetan Bernardo Arfaxad Saldaña Sánchez
Javier García Cuevas
Eliseo Arturo Navarro Cavazos
Víctor Miguel Santillán Lázaro
Para ejecutar la herramienta Flex, bastará con escribir en la consola el comando “Flex”, seguido de un
fichero con terminación .l, que contendrá la especificación de nuestro analizador léxico. Flex va a
generar automáticamente código en c correspondiente al analizador léxico. En concreto, este código c
va a tener una función llamada “yylex()”, que será a la que tenemos que llamar para ejecutar el
analizador léxico.
Después de ejecutar el comando, flex generará un fichero llamado “lex.yy.c”, el cual se tiene que
compilar para posteriormente obtener un archivo ejecutable que servirá para analizar los textos.
Con nuestro archivo ejecutable, usaremos un pipe para enlazarlo con el texto que deseemos analizar.
Después se compila el código fuente en C generado para generar el ejecutable del analizador:
gcc -o escaner1 lex.yy.c -lfl
Y finalmente se ejecuta el analizador para procesar algún archivo de texto. Por ejemplo, si el archivo de
texto se llama texto_prueba.txt:
./escaner1 < texto_prueba.txt
Este texto únicamente incluye la función int main donde se manda llamar yylex(), que se debe declarar
para poder generar el analizador léxico.
Como no contiene definiciones ni reglas, va a copiar el texto de entrada tal cual, a la salida, como se
muestra a continuación:
Ahora se compila usando gcc el código fuente en C generado para generar el ejecutable del analizador.
El texto contiene dos definiciones, num_lines y num_chars, ambas inicializadas en 0 y de tipo entero.
Tenemos el patrón \n seguido de la acción ++num_lines y posteriormente ++num_chars, esto indica
que cada que encuentre un salto de línea, aumentara en uno el valor de num_lines y de num_chars. El
segundo patrón que está en el texto es punto sucedido por la acción ++num_chars, que indica que
cuando haya cualquier carácter excepto un avance de línea aumenta en 1 el valor de num_chars.
Entonces usamos el analizador léxico y demostramos:
Una vez que se ejecutó el analizador de texto, se procedió con el tercer ejercicio propuesto:
%%
[ \t]+ putchar(' ');
[ \t]+$ /* ignore this token */
%%
int main() {
yylex(); }
El programa cambia un espacio o más por solo uno, igualmente para el tabulador
Ahora se compila usando gcc el código fuente en C generado para generar el ejecutable del analizador.
%%
main() {
printf("<html>\n");
yylex();
printf("</tr>\n</table>\n</html>\n");
}
Ahora se compila usando gcc el código fuente en C generado para generar el ejecutable del analizador.
El texto contiene dos definiciones, num_lines y num_chars, ambas inicializadas en 0 y de tipo entero. Tenemos
el patron \n seguido de la acción ++num_lines y posteriormente ++num_chars, esto indica que cada que
encuentre un salto de línea, aumentara en uno el valor de num_lines y de num_chars. El segundo patron que
esta en el texto es punto sucedido por la acción ++num_chars, que indica que cuando haya cualquier carácter
excepto un avance de línea aumenta en 1 el valor de num_chars. Entonces usamos el analizador léxico y
demostramos:
Una vez generado el ejecutable procedemos a usar el archivo de texto, el cual solo contiene declaraciones:
Podemos observar que lo que nos muestra en pantalla es similar a código HTML, por que procedemos a
regenerar el un archivo de salida con la extensión .html