Mostrando entradas con la etiqueta Lex. Mostrar todas las entradas
Mostrando entradas con la etiqueta Lex. Mostrar todas las entradas

Proyectos de Compiladores, ESCOM

Esta vez los saludo con un megapack: los proyectos de la asignatura de Compiladores en la ESCOM, entre ellos un conversor expresión regular-AFN-AFD (Java) y un analizador léxico-sintáctico (C). Y es que por problemas técnicos (y un poco de flojera) no los subí en el tiempo en el que fueron realizados.

La asignatura la cursé con el profesor Juárez Gambino Omar, junto con mi equipo: Cruz Cruz Jorge y Gonzales Rodríguez  Javier (@newbie_geek). A lo largo del semestre aprendí demasiado, y parte de ello fue que había mucho tiempo para practicar lo aprendido, aplicando el conocimiento en varias practicas a lo largo del curso.

La primera, fue un programar un analizador léxico, código y un sencillo reporte el cual coloco a continuación:

La segunda, el conversor de expresión regular a autómata finito no determinista, y de autómata finito no determinista a uno determinista. Este está hecho en Java:

La tercera práctica consistió en utilizar el lenguaje Flex para generar un analizador léxico (muy básico) para C, si ya conocen el lenguaje sabrán que la extensión (por convención) es .l:

Para la cuarta práctica comenzamos a emplear Bison, para ayudarnos en la construcción de un analizador sintáctico, la práctica fue individual, porque en realidad era sencilla. Basarnos en un ejemplo y hacer una calculadora:

La quinta y última práctica fue un analizador léxico y sintáctico para C haciendo uso de Flex y Bison juntos, en teoría es la más complicada, y que requirió más trabajo pero no por eso faltó:

La finalidad de poner estos códigos y reportes como descargables es que tú los puedas checar, leer, tratar de entender y posteriormente implementar a tu modo. No simplemente los descargues y entregues, o lo que es peor, no los bajes y cambies los nombres a las variables (nos gustan los nombres de nuestras variables, no los cambies). Como dicen "allá afuera no vas a encontrar las cosas hechas", así que lo ideal sería que estudies y trates de comprender el código.

Si hay alguna parte que no te queda clara puedes comentarla debajo o enviarme un correo, ya de menos un tuít. Pero hagas lo que hagas, NO COPIES.

¡Saludos!
@fferegrino :)

De C a HTML con Flex (como Norman manda)

Ya hace unos días les había hablado de flex y la práctica que teníamos que hacer. Bien, resulta que apenas se entrega. Y no es como inicialmente la había hecho:

Lo que había hecho fue de manera individual y esta que subo hoy es en equipo (Mi equipo: Byron, Gaby y Robert).
Las funciones que escriben el archivo html están por separado. Para mejor explicación visita el post anterior.

Descargas
PracticaC2HTML.tar.gz
PracticaC2HTML.zip


¡Saludos!
@fferegrino :)

De C a HTML con Flex

De nuevo por acá, esta vez gracias a otra de mis asignaturas en la ESCOM. Toca el turno a Teoría computacional, fue el turno de usar Flex, herramienta que en lo particular no conocía. Lo que teníamos que hacer era usar Flex para escribir un programa que de un archivo con código en lenguaje C nos lo "transfiriera" a un archivo con formato html estilizado con CSS.

La idea era encontrar palabras reservadas, tipos de datos, identificadores, directivas, operadores, y cualquier otro tipo de cadenas permitidas con el analizador léxico y asignarles cierto estilo en un documento html. 

Trato de explicar gráficamente: la imagen de la izquierda es código en C, después de introducir este archivo en el programita nos debe entregar algo como la captura derecha, que es un na representación estilizada con CSS del archivo que introdujimos.



¿Qué es Flex?
Resulta que Flex, en términos prácticos (Wikipediazo), es un programa para generar analizadores léxicos. Uno mete la especificación de un analizador léxico y Flex regresa como salida la implementación en C de lo que nosotros introdujimos. En realidad es muy sencillo utilizarlo, solo hay que tener en cuenta la estructura del archivo que vamos a usar como entrada al programa, esta es sencilla y muy fácil de recordar, un archivo "lex", se divida en tres secciones (separadas por líneas que solo contienen '%%' como texto en ellas). Las líneas son:
1.- Sección de declaraciones
Lugar para incluir cabeceras, macros, variables globales... también es posible definir patrones a usar en la sección de reglas
%%
2.- Sección de reglas
Aquí es donde se asocian los patrones(expresiones regulares) a buscar con sentencias(código) de C. Cada vez que el analizador encuentra un a cadena que coincide con el patrón, se ejecuta el código en C
%%
3.- Sección de código en C
Contiene sentencias en C y funciones que serán copiadas íntegramente en el archivo que Felx genere, comúnmente se colocan aquí las funciones que se llamarán en la sección de reglas.

Descargas
Al compilar el programa en Flex nos devuelve un código compilable pero ahora en lenguaje C, el cual ya debería de hacer lo que nosotros le indicamos. En el descargable básico viene el archivo cToHtml.l que es el archivo en lenguaje Lex, el archivo de estilos estilos.css que es la hoja de estilos que se usa para formatear el documento de salida y el archivo Makefile que nos facilita la compilación y el archivo Leeme.txt PARA QUE LO LEAN, en donde viene como se usa el programa final. En el descargable completo, viene, además de lo indicado arriba, el archivo lex.yy.c que es el código que se genera al compilar en Flex y el archivo salida.html que es un ejemplo de lo que entrega nuestro programa si hacemos pasar por el a lex.yy.c.

Recuerda que para cualquier duda, comentario o invitación a una cerveza, está la sección de comentarios, mi cuenta en Twitter o mi correo. 

¡Saludos! @fferegrino :)