elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Guía rápida para descarga de herramientas gratuitas de seguridad y desinfección


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  duda con flex y bison
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: duda con flex y bison  (Leído 2,991 veces)
yoxter

Desconectado Desconectado

Mensajes: 48



Ver Perfil
duda con flex y bison
« en: 27 Agosto 2012, 03:04 am »

Saludos,
estoy aprendiendo flex y bison bajo c, pero me surge una duda, solo he visto lo basico de flex y me doy cuenta que es como un interprete (al estilo rails), es decir no puedo utilizarlo para traducir directamente el codigo que introduzca a c y luego compilar el codigo de c.  espero haberme expresado correctamente.


En línea




Posiblemente soy el intento de programador mas fracaso de la historia !!
fabianjsm

Desconectado Desconectado

Mensajes: 26


Ver Perfil WWW
Re: duda con flex y bison
« Respuesta #1 en: 27 Agosto 2012, 03:44 am »

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:

Código
  1. int nl = 0, nc = 0;
  2. %%
  3. \n  ++nl; ++nc;
  4. .   ++nc;
  5. %%
  6. int main()
  7. {
  8.    yylex();
  9.    printf( "%d caracteres en %d lineas\n", nc, nl);
  10.    return 0;
  11. }

Procesar con flex y compilar:

Código
  1. $flex test.l
  2. $gcc -o test lex.yy.c


En línea

yoxter

Desconectado Desconectado

Mensajes: 48



Ver Perfil
Re: duda con flex y bison
« Respuesta #2 en: 27 Agosto 2012, 04:04 am »

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:

Código
  1. int nl = 0, nc = 0;
  2. %%
  3. \n  ++nl; ++nc;
  4. .   ++nc;
  5. %%
  6. int main()
  7. {
  8.    yylex();
  9.    printf( "%d caracteres en %d lineas\n", nc, nl);
  10.    return 0;
  11. }

Procesar con flex y compilar:

Código
  1. $flex test.l
  2. $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
Código
  1. %{
  2. int nl = 0, nc = 0;
  3. %}
  4. %%
  5. \n  ++nl; ++nc;
  6. .   ++nc;
  7. %%
  8. int main()
  9. {
  10.    yylex();
  11.    printf( "%d caracteres en %d lineas\n", nc, nl);
  12.    return 0;
  13. }
  14.  

En línea




Posiblemente soy el intento de programador mas fracaso de la historia !!
fabianjsm

Desconectado Desconectado

Mensajes: 26


Ver Perfil WWW
Re: duda con flex y bison
« Respuesta #3 en: 29 Agosto 2012, 05:26 am »

Tienes razón, modifique el código y lo compile para probar

Código
  1. %option noyywrap
  2. %{
  3. #include <stdio.h>
  4. int nl = 0, nc = 0;
  5. %}
  6.  
  7. %%
  8. \n  ++nl; ++nc;
  9. .   ++nc;
  10. %%
  11.  
  12. int main()
  13. {
  14.    yylex();
  15.    printf( "%d caracteres en %d lineas\n", nc, nl);
  16.    return 0;
  17. }

'%option noyywrap' para que no requiera esta función.
Lo compilé y lo probé de este modo:
Código
  1. $flex lex.l
  2. $gcc lex.yy.c -o lex
  3. $cat lex.l | ./lex

Esta fue la salida:

193 caracteres en 19 lineas
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
VB y FLEX
Programación Visual Basic
olve 0 1,520 Último mensaje 29 Junio 2010, 19:18 pm
por olve
Problemas con Bison en C++
Programación C/C++
vegenisennawa 2 3,197 Último mensaje 13 Enero 2011, 03:42 am
por apocalcell
necesito ayuda con flex y bison
Programación C/C++
brian1373 0 1,139 Último mensaje 18 Mayo 2018, 20:25 pm
por brian1373
Alguna documentación de bison y flex?
Programación General
Jacpp35721 0 2,026 Último mensaje 7 Agosto 2020, 19:45 pm
por Jacpp35721
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines