Peut on les avoir sur Windows? [LEX && YACC] - C - Programmation
Marsh Posté le 12-10-2005 à 22:04:48
cervantes a écrit : Sur une plateforme Unix Sun Solaris, j'ai des programmes qui utilisent des programmes C obtenus grace aux librairie LEX et YACC, je dois porter ces programmes sur une plateforme windows. Je voulais savoir s'il existait un moyen d'installer YACC et LEX sur Windows pour que je recompile mes programmes C. |
Ben oui, essaye plutôt les clones GNU flex et bison... est ton ami.
Marsh Posté le 12-10-2005 à 22:25:35
Tu vas peut etre pouvoir eclairer ma lanterne.
Quel est le lien flex/lex et bison/yacc? est ce que flex ne serait pas l'equivalent de lex sur Windows et Bison l'equivalent de yacc?
Marsh Posté le 12-10-2005 à 22:43:05
cervantes a écrit : Tu vas peut etre pouvoir eclairer ma lanterne. |
Ca parait un peu évident, non ? Sinon, tu lis la doc.
Yack :
Bison:
Marsh Posté le 02-12-2008 à 18:02:13
Bonjour,
Je cherche à réaliser une petite calculatrice simple fonctionnant sous windows. Par exemple l'utilisateur rentre une chaine de caractères comme "5-(4.2*3) + sin(PI/3)" puis l'application retourne le résultat après appui sur la touche 'Enter' ou après un clic sur le bouton 'OK'
J'ai pensé utiliser des générateurs d'analyseurs syntaxique et lexical comme flex et bison. Je ai donc téléchargé flex et bison sous windows, mais le problème est que j'ai l'impression que ça ne marche que dans une fenêtres DOS, or moi je veux que ça fonctionne dans une appli win32.
Ce que j'aimerais c'est que l'entrée ne soit pas STDIN ou un fichier mais une chaine de caractères !
Savez-vous comment procéder ?
Marsh Posté le 02-12-2008 à 20:35:53
Citation : mais le problème est que j'ai l'impression que ça ne marche que dans une fenêtres DOS |
Quest-ce qui ne marche que dans une fenetre dos??
flex et bison? Normal, puisque ca n'a pour but que de generer des fichiers a incorporer dans son propre programme.
Le code généré? non, on peut tres bien intégrer ca a un programme dévellopé pour windows.
A+,
Marsh Posté le 03-12-2008 à 01:15:24
Je parle bien évidemment du code généré.
Le problème est que je ne vois pas comment l'intégrer à un programme windows.
Ce que je voudrais c'est que la fonction yyparse() analyse une chaîne de caractères et non l'entrée STDIN
Marsh Posté le 03-12-2008 à 13:36:23
Si vous lisiez la documentation de bison/flex, ca pourrait être utile.
Citation : Three routines are available for setting up input buffers for scanning in-memory strings instead of files. All of them create a new input buffer for scanning the string, and return a corresponding YY_BUFFER_STATE handle (which you should delete with yy_delete_buffer() when done with it). They also switch to the new buffer using yy_switch_to_buffer(), so the next call to yylex() will start scanning the string. |
A+,
Marsh Posté le 18-12-2008 à 20:31:03
Bon à la compilation j'ai le message d'erreur suivant :
[Linker Error] undefined reference to 'yy_scan_string'
[Linker Error] undefined reference to 'yy_delete_buffer'
J'essaie de trouver la solution de mon côté, mais si quelqu'un connaît la réponse, ce serait sympa qu'il se manifeste !
Marsh Posté le 20-12-2008 à 13:24:16
Bon pour être plus précis les fonctions sont dans le main du fichier bison :
Citation : |
Quelqu'un a t'il une idée ?
Marsh Posté le 20-12-2008 à 16:15:03
C'est dans le .l ?
Et tu fais quoi comme include?
Et tu linkes comment?
De plus, la chaine doit être terminée correctement par un \0:
char* chaine = "1+2+3+4+5*3\0";
A+,
Marsh Posté le 20-12-2008 à 18:25:38
gilou a écrit : |
c'est pas fait automatiquement ?
Marsh Posté le 20-12-2008 à 18:50:57
En y repensant, oui, ca doit être la cas, c'est quand on passe un buffer qu'il faut faire gaffe.
A+,
Marsh Posté le 22-12-2008 à 19:20:44
Bon après plusieurs recherches sur Internet et tâtonnements j'ai fini par trouver !!!
La doc officielle de flex n'aide pas vraiment et il n'y a quasiment rien à ce sujet sur le web !
C'est une page web qui m'a aiguillé vers la solution, la voici : http://www.geocities.com/dbeurive/commun/bison.htm
Donc dans le lex (fichier d'extension .l) il fallait rajouter ça :
Citation : |
et dans le fichier contenant le main (qui peut être le fichier yacc) :
Citation : /* ----------------------------------------------------- */ |
Voilà, je vais pouvoir avancer dans mon appli !
Marsh Posté le 12-10-2005 à 21:52:31
Lut,
Sur une plateforme Unix Sun Solaris, j'ai des programmes qui utilisent des programmes C obtenus grace aux librairie LEX et YACC, je dois porter ces programmes sur une plateforme windows. Je voulais savoir s'il existait un moyen d'installer YACC et LEX sur Windows pour que je recompile mes programmes C.
Sous unix, la commande c'est :
j'obtiens donc un programme C appelé lex.yy.c
et j'obtiens un programme C appelé y.tab.c
Apres je peux utiliser ces 2 programmes pour en compiler d'autre.
A+