• Sábado 14 de Diciembre de 2024, 20:40

Autor Tema:  Re: Flex Y Bison :(  (Leído 7918 veces)

tiki

  • Nuevo Miembro
  • *
  • Mensajes: 10
    • Ver Perfil
Re: Flex Y Bison :(
« en: Domingo 20 de Febrero de 2005, 20:18 »
0
Hola chicos,,, toy haciendo una practica que me han mandado, y tengo que hacer un pequeño compilador en c siguiendo los siguientes pasos.

• Escribir la sintaxis léxica en formato lex
• Usando Flex, generar un analizador léxico en c
• Escribir la gramática en formato yacc
• Usando bison, generar un analizador sintáctico en c
• Una vez probado e integrado, introducir elementos de comprobación y de
traducción semántica en la gramática
• Depurar y probar el conjunto

Estoy usando el cygwin y estoy atrancada en un paso que no se como seguir.
Esto es lo que he hecho hasta ahora... me he bajado los archivos lexer9x.l y grammar9x.y y los he metido en la ruta c:/cygwin/home/tiki

despues usando el comando bison -d se me genera el archivo grammar9x.tab.h

Luego  ejecuto el comando flex -t lexer9x.l y se me crea el archivo lex.yy

Ya tengo los dos ficheros .c y ahora me pide que construta algo parecido a un verificador (solo deteccion de errores) con la orden gcc -o veridicador an_lex.c an_synt.c –ly

y es justamente ahi donde estoy atascada :( me podria ayudar alguien por favor??????

Muchishishishimas gracias!!!!

CiRRuS

  • Miembro MUY activo
  • ***
  • Mensajes: 218
    • Ver Perfil
    • http://zirrus.es
Re: Flex Y Bison :(
« Respuesta #1 en: Domingo 20 de Febrero de 2005, 21:50 »
0
Antes que nada comentar que todo lo que he hecho es bajo linux, pero espero que se parezca, al fin y lal cabo los programas FLEX, BISON y YACC siempre han sido pa linux pero se han adaptado a otros sistemas.

No termino de entender exactamente donde estas atascad@. Segun he leido, tienes definidos los componentes lexicos en el fichero .l para flex. Además ya tienes definida la gramática en el fichero .y para bison. Bien, ¿que te falta ahora?.

Si necesitas solamente controlar los errores:

- Para los errores léxicos debes "recogerlos" en el fichero flex, normalmente la ultima regla siempre suele "encajar" con la entrada (generalmente se pone un punto para que trague). Así que lo que encaje con esa regla, es un error léxico. Si quieres ser más meticulos@, prueba a usar las condiciones de arranque de FLEX.

- Para los errores sintácticos es muy recomendable que uses el token error de bison. Debes incorporarlo en aquellas reglas de produccion de la gramática que "recojan" la mayoría de los errores de los usuarios. Una idea muy socorrida es ponerlo en la regla de produccion del simbolo inicial de la gramatica, asi al menos siempre recoges errores.

Si en algun momento te piden que muestres la linea del error (todos los profesores suelen exigirlo ;)) debes usar la variable yylineno de FLEX. Para usarla en BISON deberás declararla como externa.

Si te tienes que meter con los atributos de la gramática recuerda que bisón no permite la definición de atributos heredados, pero sí que permite las acciones en mitad de la regla.

Con lo de "...traduccion semántica..." me has asustado, espero que no sea lo que me estoy pensando, pues entonces la práctica es bassstante dificil.

Espero haberte ayudado, para cualquier cosa, pregunta sin ningun reparo.

Nos vemos :hola:

EDITO: Pequeñas modificaciones
Core Dumped
zirrus.es

CiRRuS

  • Miembro MUY activo
  • ***
  • Mensajes: 218
    • Ver Perfil
    • http://zirrus.es
Re: Flex Y Bison :(
« Respuesta #2 en: Domingo 20 de Febrero de 2005, 21:56 »
0
Mmmm, replanteandome dónde puede estar tu atrancamiento, estoy pensando que quizás no sepas por donde empezar a programar, es decir, donde empezar a ejecutar código.

En el archivo de bison, después de la definición de la gramática, deberías colocar un main que llamara a la funcion yyparse, que haría comenzar el análisis sintáctico. El análisis se alimenta de la entrada estándar, pero puedes modificarlo usando la variable yyin. Durante el análisis, cada reducción de una regla de producción provocará que se ejecute el código de la acción semántica adjunto a dicha regla de producción.

Nos vemos :hola:
Core Dumped
zirrus.es

tiki

  • Nuevo Miembro
  • *
  • Mensajes: 10
    • Ver Perfil
Re: Flex Y Bison :(
« Respuesta #3 en: Domingo 20 de Febrero de 2005, 22:42 »
0
ufff eske fijo me he explicado mal.... mira te adjunto la memoria de la practica y asi ves tu como va mas o menos la movida....
Yo donde estoy atascada es en la parte del verificador.... ke es ke no tengo ni idea de como va... los puntos anteriores me han salido todos....

Muxas gracias!!!
El mensaje contiene 1 archivo adjunto. Debes ingresar o registrarte para poder verlo y descargarlo.

CiRRuS

  • Miembro MUY activo
  • ***
  • Mensajes: 218
    • Ver Perfil
    • http://zirrus.es
Re: Flex Y Bison :(
« Respuesta #4 en: Domingo 20 de Febrero de 2005, 23:54 »
0
Veamos, segun el documento, lo de flex y bison te lo bajas y lo compilas. Ya has comentado que lo tienes listo. Bien, al parece el problema viene ahora con

Citar
gcc -o verificador an_lex.c an_synt.c –ly
Pero fijate que 'verificador' es solo el nombre del ejecutable. Realmente solo vas a usar los archivos an_lex.c y an_synt.c, que son precisamente el analizador lexico y sintactico que ya has construido.

Fijate que dice
Citar
...ya puedo construir algo parecido a un verificador (solo detección de errores)...
Lo de "...(solo deteccion de errores)..." va por los tiros que te comente, a partir de los archivos de FLEX y BISON pueden introducir instrucciones para detectar los errores.

Esto lo aclara aún más:
Citar
...Si fuera necesario hacer alguna modificación para que la compilación sea perfecta, esta debe hacerse siempre sobre los ficheros .l y .y, siendo la generación de c un paso transparente...
Te mandan a los ficheros .l (de flex) y .y (de bison) para que modifiques directamente el analizador lexico y sintactico.

He estado mirando los archivos de flex y bison del enlace que se facilita. Como ves, el fichero .l tiene en su cabecera un include del archivo "y.tab.h" que debe ser lo que debes construir con bison. Así que el archivo .tab.h que contruyas con bison debe ser precisamente ese "y.tab.h", lo mas normal es que te construya uno llamado grammar9x.tab.h, pues tu lo renombras a "y.tab.h" y luego compilas el ".l". Si te fijas el archivo FLEX ya incluye un main, que ademas ya llama al yyparse(), asi que tienes casi practicamente el trabajo hecho.

Lo que te pide la practica es que a partir de eso, introduzcas deteccion de errores.

No dudes en preguntar.

Nos vemos :hola:

[/QUOTE]
...simplemente desde una descripción bnf y ebnf es un trabajo considerable que no vamos a abordar aquí...
Citar
A mi si que me toco ese "trabajo considerable"... Que suerte has tenido!
Core Dumped
zirrus.es

tiki

  • Nuevo Miembro
  • *
  • Mensajes: 10
    • Ver Perfil
Re: Flex Y Bison :(
« Respuesta #5 en: Jueves 24 de Febrero de 2005, 00:55 »
0
eiii ya me compilaaaa ke buen rollo pero ahora me he vuelto a atascar si es ke soy lo peor... vaya problemistas me esta dando la practika... jolines... la verdad es ke ahora toy mas perdida ke un bicho en un garage.... una ves que me compilo me cree un programa en ada pra probar el verificador y comprobar que funciona y ya me keda solo la ultima parte de la practika pero es ke realmente no se que tengo ke hacer ahi,,, me dice que tengo ke hacer un pseudocodigo... bueno te pasteo a ver si tu entiendes algooo ;)

El siguiente paso será la generación de un pseudocódigo a partir de las reglas léxicas y
sintácticas. En concreto la salida debe contener solamente estas instrucciones y ninguna
otra:
COMENTARIO
ASIGNACION
PROCEDURE
FUNCION
IF
BUCLE (se aplica para for, while y loop)
La salida se hará por pantalla usando printf. Ejemplo: {printf(“BUCLE\n”);}
Compilar el resultado y probadlo con un ejemplo.


Muchas gracias me estas sirviendo de una ayuda increible... no se ke haria de verdad ;)

CiRRuS

  • Miembro MUY activo
  • ***
  • Mensajes: 218
    • Ver Perfil
    • http://zirrus.es
Re: Flex Y Bison :(
« Respuesta #6 en: Jueves 24 de Febrero de 2005, 20:26 »
0
Mmmm, en ADA no se programar... pero la cuestion es el analisis sintactico asi que espero poder ayudarte.

Una vez que tengas todo listo, como ya me has comentado, debes probar tu "compilador" con archivos escritos en ADA.

Lo que debes hacer (al menos yo que yo entiendo) es "meterle" a tu analizador un programa en ADA y tu programa se encargará de analizarlo lexica y sintacticamente de tal forma que cada vez que reduzcas una regla de produccion debes emitir por la pantalla el tipo de instruccion en lenguaje ADA que es (ASIGNACION, BUCLE... ).

No se si me explico. Por ejemplo, en C:

Código: Text
  1.  
  2. int algo() {
  3.    /* Prueba numero uno */
  4.    a = 1;
  5.    if(a == 1)
  6.       printf("Hola\n");
  7. }
  8.  
  9.  

Tu salida debería ser:
Código: Text
  1.  
  2. FUNCION
  3.    COMENTARIO
  4.    ASIGNACION
  5.    IF
  6.       FUNCION
  7.  
  8.  

Esto ultimo seria recomendable que se lo comentaras al profesor, para asegurarte de que realmente te esta pidiendo eso.

Animo!

Nos vemos :hola:
Core Dumped
zirrus.es

tiki

  • Nuevo Miembro
  • *
  • Mensajes: 10
    • Ver Perfil
Re: Flex Y Bison :(
« Respuesta #7 en: Jueves 24 de Febrero de 2005, 21:19 »
0
si, el lo ke me dice es ke modifike los archivos .y y .l
Dice que en el .l debo buscar en que regla se buscan los comentarios, y añadir como accion el printf correspondiente. En el punto y debo hacer algo similar para las reglas afectadas. Luego me remite al manual del bison para encontrar como añadir acciones, Uff ke chungooo... io el programita ke me hice en ada es el de años vividos... pero amos deberia de rular = no???? ;)
He estado mirando en el manual de bison como añadir acciones y de momento no encontre nada, tb es ke soy una ansiosa, debo de mirar con mas atencion... seguro que encuentro algo.. esta es la pagina en la que estoy mirando
manual bison
 pero si tu conoces alguna mejor... te lo agradeceria...

Muchas gracias!

CiRRuS

  • Miembro MUY activo
  • ***
  • Mensajes: 218
    • Ver Perfil
    • http://zirrus.es
Re: Flex Y Bison :(
« Respuesta #8 en: Jueves 24 de Febrero de 2005, 22:25 »
0
Conocer no conozco ninguna, yo tuve que lidiar directamente con el manual de bison de la ultima version... sorry

Los comentarios los reconoces en el nivel léxico (con FLEX) y por eso debes meter las acciones ahí.

Para comprobar que reconoces los otros tokens debes incluir acciones a las reglas de producion, por ejemplo:

Código: Text
  1.  
  2. A: B
  3.     { printf("Se reconocio el token B\n"); }
  4.   | C
  5.     { printf("Se reconocio el token C\n"); }
  6. ;
  7.  
  8.  

Esto ya no era tan complicado ;), seguro que lo tenias en el manual :D

Nos vemos :hola:
Core Dumped
zirrus.es