El código del ejemplo lo pueden descargar aquí
El Blog del Ing. Hobbit
domingo, 23 de octubre de 2011
Videotutorial Flex y Bison
Ejemplo de la estructura de los archivos de flex y bison y recuperación de errores sintácticos.
El código del ejemplo lo pueden descargar aquí
El código del ejemplo lo pueden descargar aquí
domingo, 14 de agosto de 2011
Ejemplo de Estados en JLex
Se modificara el archivo de JLex para manejar estados. Los estados que maejaremos son
Nuestro codigo JLex como quedara lo pueden descargar aqui
- YYINITIAL: Que es el estado creado por defecto en JLex
- COMENTARIO: Que es el estado que manejara y reconocera nuestros comentarios.
El tipo de comentario que reconocera es de la forma:
/* Este es un comentario
De varias lineas
*/
Nuestro codigo JLex como quedara lo pueden descargar aqui
Ejemplo JLex sin usar Cup en Ubuntu
En este ejemplo se explica como se realiza un analisis lexico con JLex sin usar el analizador sintactico en ubuntu, para esto se supone que ya instalaron y configuraron las herramientas.
Instalación JLex y Cup en Ubuntu
En el siguiente video se muestra como instalar las herramientas de JLex y Cup para realizar un analisis lexico, semantico y sintactico en Java. Luego se muestra con un ejemplo que todas las herramientas este correctamente instaladas y configuradas.
Algo que no explica en el video es que en Ubunto (No se si en las otras distribuciones es igual), cada vez que se reinicia el sistema hay que configurar nuevamente las variables de entorno de JLex y Cup, para evitar esto, debemos de agragar la linea export CLASSPATH=.:/usr/share/java/JLex.jar:/usr/share/java/cup.jar al final de del archivo .bashrc, para hacer esto, desde una consola ejecutamos el siguiente comando
echo "export CLASSPATH=.:/usr/share/java/JLex.jar:/usr/share/java/cup.jar" | tee -a ~/.bashrc
Y listo, las variables de entorno de JLex y Cup no se borraran cada vez que reiniciamos el sistema.
Algo que no explica en el video es que en Ubunto (No se si en las otras distribuciones es igual), cada vez que se reinicia el sistema hay que configurar nuevamente las variables de entorno de JLex y Cup, para evitar esto, debemos de agragar la linea export CLASSPATH=.:/usr/share/java/JLex.jar:/usr/share/java/cup.jar al final de del archivo .bashrc, para hacer esto, desde una consola ejecutamos el siguiente comando
echo "export CLASSPATH=.:/usr/share/java/JLex.jar:/usr/share/java/cup.jar" | tee -a ~/.bashrc
Y listo, las variables de entorno de JLex y Cup no se borraran cada vez que reiniciamos el sistema.
martes, 19 de julio de 2011
Ontologia eSalud
En el curso de Inteligencia Artificial 1 impartido por Javier Gramajo Lopez, he estado trabajando en un proyecto sobre ontologías, que son búsquedas semánticas que es parte de la web 3.0, es una tecnología relativamente nueva en el cual se reemplaza una base de datos con álgebra relacional, con una relación semántica.
Mi tema de ontología se centra en búsquedas relacionadas con eSalud que son los bienes y servicios que prestan centros de salud a distancia desde un punto remoto, también la ontoligia hace búsquedas de farmacias, medicamentos, especialistas y educación sobre eSalud.
Este es solo el primer prototipo, no esta poblada de todos los datos existentes, pero seguiré trabajando en esta tecnología mejorando las búsquedas y poblando.
A continuación muestro la documentación, explicando con mas claridad lo que son las Ontologias, eSalud y hablando sobre este prototipo.
Ontologia eSalud
El prototipo lo pueden encontrar en: http://esaludusac.comli.com
Mi tema de ontología se centra en búsquedas relacionadas con eSalud que son los bienes y servicios que prestan centros de salud a distancia desde un punto remoto, también la ontoligia hace búsquedas de farmacias, medicamentos, especialistas y educación sobre eSalud.
Este es solo el primer prototipo, no esta poblada de todos los datos existentes, pero seguiré trabajando en esta tecnología mejorando las búsquedas y poblando.
A continuación muestro la documentación, explicando con mas claridad lo que son las Ontologias, eSalud y hablando sobre este prototipo.
Ontologia eSalud
El prototipo lo pueden encontrar en: http://esaludusac.comli.com
domingo, 29 de mayo de 2011
jueves, 12 de mayo de 2011
Como unir varios archivos de felx y bison en un mismo proyecto
Supongamos que en un proyecto necesitan analizar varios archivos uno tiene extensión .conf, que tiene la estructura de su tabla de símbolos, otro tiene extensión .sql que trae instrucciones para insertar datos y varios archivos con extensión .dbf que tienen los datos ya insertados. Y todos estos archivos deben de ser analizados con flex y bison.
Si ya han creado todos sus scanners y parsers, uno para el archivo con extensión .conf, uno para el .sql, otro para los .dbf, ahora como llamarlos desde la aplicación? Si todos los archivos generados los tenemos con el nombre parser y si los agregan a su proyecto les darán errores. Tienen que hacer varias cosas antes de integrar más de un archivos felx y bison en un mismo proyecto, para eso sigan los siguientes pasos:
1) Es mejor tener todos los analizadores en carpetas diferentes, es decir creas una carpeta conf y en ella guardar los archivos .l y .y. para analizar el .conf. En otra carpeta, por ejemplo sql, guardas otros archivos .l y .y para analizar los .sql. Esto en realidad no es necesario, solo es para tener una estructura ordenada de nuestro proyecto.
2) Van a nombrar a cada archivo .l y .y diferentes. por ejemplo para analizar el .conf pueden llamarlos lexico1.l y sintactico1.y y para el .sql poden llamarlo lexico2.l y sintactico2.y. Esto es un ejemplo, poden llamarlos como ustedes quieran, pero tomen en cuenta que son nombres diferentes.
3) En sus archivos .l y .y existen funciones como yylval, yytext, yyparse, etc. deben de cambiarle el "yy" a cada uno de ellos, por ejemplo yy1lval, yy1text, yy1parser, etc. esto para que no exista conflicto luego de juntar los dos analizadores.
4) Si usan una variable por ejemplo linea o archivo en su lexico1.l o sintactico1.y , y usan estas mismas variables en los archivos lexico2 y sintactico2, deben de cambiarlo, también por conflictos de que existen 2 variables declaradas en diferentes archivos entonces deben de llamarlos de diferente forma, por ejemplo linea1 y archivo1 en su primer analizador y linea2 y archivo2 en el otro. (Nota: Existe conflicto solo cuando usan extern para hacer referencia a una variable que está en otro archivo).
5) Ahora para compilar cada uno de estos archivos lo haces con los mismos comandos, pero las salidas van a nombrarlas de diferente manera y agregar el parámetro –P y –p en flex y bison respectivamente.
Para el .conf
> flex -P yy1 --header-file=scanner1.h -o scanner1.cpp lexico1.l
> bison -p yy1 – o parser1.cpp --defines=parser1.h sintactico1.y
Para el .sql
> flex -P yy2 --header-file=scanner2.h -o scanner2.cpp lexico2.l
> bison -p yy2 – o parser2.cpp --defines=parser2.h sintactico2.y
Por último, cuando quieran usar los diferentes parser lo haces de la siguiente forma
Para el .conf
yy1in=fopen( "entrada.conf","rt");
if (!yyin)
cout<<"error al abrir"<<endl;
yy1parse();
Para el .sql
yy2in=fopen( "entrada.sql","rt");
if (!yy2in)
cout<<"error al abrir"<<endl;
yy2parse();
Nota: En resumen, al compilar usan los parámetros -P yy1 en flex y -p yy1 en bison, esto hace que todas las funciones como yylval, yytext, yyparser, etc, cambie el "yy" por el "yy1" que esta en comando para compilar, entonces al generar los archivos las funciones se llamen yy1lval, yy1text, yy1parser. Por eso es que cambiamos en el paso tres el nombre de las funciones que inician con yy en los archivos lexico.l y sintactico.y. Y de esta forma evitan que se dupliquen las funciones y que exista un conflicto y les de error en su proyecto.
Suscribirse a:
Entradas (Atom)