FLEX_01.l



/* PRUEBAS DE ALGUNAS EXPRESIONES REGULARES
	COMPILAR CON:	flex NOMBRE.l
			gcc lex.yy.c .o NOMBRE -lfl
*/
%{
	#include <string.h>
	void  muestra();
	void otro();
	int copia(char*);
	int num_lineas= 0, num_caracteres= 0;
	
	struct mia
	{
		int num;
		char *x;
	};
%}


DIGITO	[0-9]
REAL	{DIGITO}+"."{DIGITO}+
ESPACIO	[ ]
TAB	[\t]

%%
{DIGITO} { printf("DIGITO:%s (%d)\n",yytext, atoi(yytext) ); }

[0-9]+	 { printf("NUMERO:%s (%d)\n",yytext, atoi(yytext) ); }

{REAL}	 { printf("REAL:%s \n",yytext ); copia(yytext); printf("REAL_NEW:%s \n",yytext ); }

\n	{ ++num_lineas; ++num_caracteres; muestra(); }

"hola"	{ printf("HOLA: %s \n",yytext ); }

{ESPACIO}	{ printf("ESPACIO\n"); }
{TAB}		{ printf("TABULADOR\n"); }

%%


int copia(char *x)
{
	char *y = (char*)malloc(sizeof(char)*80);
	y=x;
	strcpy(y, "hola");
	printf("LONGITUD= %i\n", yyleng);
	return 1;
}

void muestra()
{
	printf("# de lineas= %d, # de caracteres.= %d\n",num_lineas,num_caracteres);
}

void otro() { printf("hola\n"); }

int main(int N, char **Args) { yylex(); }