Flex es un compilador cruzado, es decir, recibe un código y genera código para otro compilador. No deberías modificar su salida, cada vez que quieras realizar un cambio modificas el fuente, generalmente con extensión l, y vuelves a procesarlo con flex.
La salida de flex puede ser directamente compilada, sin más procesamiento. Si tienes el main dentro del fuente de lex, su salida puede ser compilada y enlazada para genera el ejecutable. Este es un ejemplo clásico de este caso:
int nl = 0, nc = 0;
%%
\n ++nl; ++nc;
. ++nc;
%%
int main()
{
yylex();
printf( "%d caracteres en %d lineas\n", nc
, nl
); return 0;
}
Procesar con flex y compilar:
$flex test.l
$gcc -o test lex.yy.c
Saludos gracias por la respuesta.
eso es a lo que me refiero el archivo que genereas a partir del lex.yy.c es mas parecido a un interprete, lo que quiero (sin animo de crear nada serio) es un compilador.
pd : el codigo deberia ir asi
%{
int nl = 0, nc = 0;
%}
%%
\n ++nl; ++nc;
. ++nc;
%%
int main()
{
yylex();
printf( "%d caracteres en %d lineas\n", nc
, nl
); return 0;
}