Bienvenidos a Nuestro Mundo - A Proyectos Beta!

En nuestra vida, desde que nacemos todo lo probamos, ensayamos y testeamos; así también erramos, caemos pero por sobre todo aprendemos. Es decir, todo lo que hacemos forma parte de una nueva experiencia, de un PROYECTO. El que siempre exista la posibilidad de mejorarlo es lo que lo convierte en BETA. En este blog queremos compartir contenidos de tipo informático con artículos de programación, software libre y propietario, redes, base de datos, noticias, experiencias, etc... y también de humor. Es un sitio de todos y para todos. Participá! Sos importante ...

Flex - Herramienta muy interesante


Flex es una herramienta para generar escáneres: programas que reconocen patrones léxicos en un texto. Flex lee los ficheros de entrada dados, o la entrada estándar. La descripción se encuentra en forma de parejas de expresiones regulares y código C, denominadas reglas. Flex genera como salida un fichero fuente en C, 'lex.yy.c', que define una rutina 'yylex()'. Este fichero se
compila y se enlaza con la librería '-lfl' para producir un ejecutable. Cuando se arranca el fichero ejecutable, este analiza su entrada en busca de casos de las expresiones regulares. Siempre que encuentra uno, ejecuta el código C correspondiente.
Esta herramienta es multiplataforma y es de software libre.
Por ahora se muy poco porque acabo de probarlo.Pero dejo un ejemplo para que lo puedan probar.
El ejemplo que les mostrare es para un lenguaje artificial.

El archivo de cabecera es: tokens_asple.c

#ifndef _TOKENS_EJ2_H
#define _TOKENS_EJ2_H

/* Palabras Reservadas del Lenguaje ASPLE */
#define TOKEN_BEGIN 1
#define TOKEN_BOOL 2
#define TOKEN_DO 3
#define TOKEN_ELSE 4
#define TOKEN_END 5
#define TOKEN_FI 6
#define TOKEN_FALSE 7
#define TOKEN_FUNCTION 8
#define TOKEN_IF 9
#define TOKEN_INPUT 10
#define TOKEN_INT 11
#define TOKEN_OUTPUT 12
#define TOKEN_REF 13
#define TOKEN_RETURN 14
#define TOKEN_THEN 15
#define TOKEN_TRUE 16
#define TOKEN_WHILE 17

/* Simbolos Simples */
#define TOKEN_SUMA 18
#define TOKEN_RESTA 19
#define TOKEN_MULTIPLICACION 20
#define TOKEN_ABRIR_PARENTESIS 21
#define TOKEN_CERRAR_PARENTESIS 22
#define TOKEN_PUNTO_Y_COMA 23
#define TOKEN_COMA 24
#define TOKEN_IGUAL 25
#define TOKEN_MAYOR 26

/* Simbolos Compuestos */
#define TOKEN_MENOR_IGUAL 27
#define TOKEN_ASIGNAR 28

/* Indetificadores y Constantes*/
#define TOKEN_ID 29
#define TOKEN_CONSTANTES_NUMERICAS 30

#endif

El archivo se denomina: asple.l

%{
#include
#include "tokens_asple.h"
%}

%option noyywrap

%%
begin { return TOKEN_BEGIN; }
bool { return TOKEN_BOOL; }
do { return TOKEN_DO; }
else { return TOKEN_ELSE; }
end { return TOKEN_END; }
fi { return TOKEN_FI; }
false { return TOKEN_FALSE; }
function { return TOKEN_FUNCTION; }
if { return TOKEN_IF; }
input { return TOKEN_INPUT; }
int { return TOKEN_INT; }
output { return TOKEN_OUTPUT; }
ref { return TOKEN_REF; }
return { return TOKEN_RETURN; }
then { return TOKEN_THEN; }
true { return TOKEN_TRUE; }
while { return TOKEN_WHILE; }
"+" { return TOKEN_SUMA; }
"-" { return TOKEN_RESTA; }
"*" { return TOKEN_MULTIPLICACION; }
"(" { return TOKEN_ABRIR_PARENTESIS; }
")" { return TOKEN_CERRAR_PARENTESIS; }
";" { return TOKEN_PUNTO_Y_COMA; }
"," { return TOKEN_COMA; }
"=" { return TOKEN_IGUAL; }
">" { return TOKEN_MAYOR; }
"<=" { return TOKEN_MENOR_IGUAL; }
":=" { return TOKEN_ASIGNAR; }
[a-zA-A][0-9a-zA-Z]+ { return TOKEN_ID; }
[0-9]+ { return TOKEN_CONSTANTES_NUMERICAS;}


%%

int main()
{
// Variables
int token;
int numeroToken;

while(1)
{
token = yylex();
numeroToken = token;
if(token == TOKEN_ID)
printf("ID y su Numero de Token es: %d.\n", TOKEN_ID);
if(token == TOKEN_CONSTANTES_NUMERICAS)
printf("NUM y su Numero de Token es: %d.\n", TOKEN_CONSTANTES_NUMERICAS);
if(token >= TOKEN_BEGIN && token <= TOKEN_ASIGNAR)
printf("KEYWORD y su Numero de Token es: %d.\n", numeroToken);
if(token == 0)
break;
}
return 0;
}

Espero que se den cuenta como yo, que es una herramienta bastante sencilla, cómoda y sobre todo ahorra bastante tiempo..

0 comentarios:

Publicar un comentario

Expresate y se crítico en tu vida. XD

Recibir Artículos Por Correo

Categorías

acertijos (1) adsense (1) adwords (1) AJAX (1) algoritmos (8) android (32) apple (5) autocad (1) base de datos (16) bash (1) becas (1) benchmark (1) blogger (2) blogs (27) bsd (1) buscadores (22) c# (1) CAD (1) camaras digitales (1) casting (1) CentOS (9) certificados (1) ciencia (1) CLEI (5) cloud computing (3) codigo fuente (9) Compiladores (4) Concursos (14) conferencias (24) congresos (6) consolas (7) criptografia (1) css (6) curso online (10) cursos (14) debian (50) Diseño (11) edicion video (7) emuladores (3) encuestas (2) entrevistas (9) ERTIC (1) etico (1) eventos (87) extjs (2) facebook (18) flash (2) flicker (1) FLISOL (13) geek (6) geoserver (2) GIMP (8) gis (29) Google (48) hacking (1) Hardware (30) haskell (3) HTML 5 (20) humor (261) imagenes (238) Ingenieria (14) internet (1) iphone (3) Java (42) Javascript (14) JQuery (3) juegos (36) libros (5) Linux (248) MAC (1) manga (2) Manuales (10) mapquest (1) MapServer (5) matematica (2) Microsoft (26) Microsoft Windows (27) Moviles (16) musicas (7) mysql (3) navegadores (41) newsletters (1) nokia (2) Noticias cientificas (7) Noticias Informaticas (39) Noticias varias (14) nube (1) openlayers (13) openstreetmap (10) opiniones (1) oracle (9) Paraguay (102) photoshop (1) Php (12) podcast (1) postgres (7) Programacion (135) prolog (1) proyectos (10) python (3) radio (6) Recursos (112) redes (10) Redes Sociales (62) resumenes (1) Revistas (57) ruby (2) seguridad (23) seminarios (6) sencha (2) SEO (3) Series (1) Silverlight (1) Sistema Operativo (27) smartphone (1) Software Libre (198) sun (2) tablet (19) tecnologia (24) tecnoPyensis (6) Testing (5) Trabajo (6) trucos (22) Twitter (29) Ubuntu (152) varios (113) videos (173) virtualizacion (14) visual basic net (2) web (86) wikipedia (1) Windows 7 (23) windows 8 (1) Windows XP (2) wordpress (5) xml (1)

Entradas Aleatorias

Seguidores

Últimos Comentarios