Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
664 connectés 

  FORUM HardWare.fr
  Programmation
  C

  [LEX && YACC]Peut on les avoir sur Windows?

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[LEX && YACC]Peut on les avoir sur Windows?

n°1221587
cervantes
Posté le 12-10-2005 à 21:52:31  profilanswer
 

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 :    
 

Code :
  1. lex mon fichier_description.lex


j'obtiens donc un programme C appelé lex.yy.c
 

Code :
  1. yacc -v -t fichier_description.yacc


et j'obtiens un programme C appelé y.tab.c
 
Apres je peux utiliser ces 2 programmes pour en compiler d'autre.
 
A+

mood
Publicité
Posté le 12-10-2005 à 21:52:31  profilanswer
 

n°1221592
Emmanuel D​elahaye
C is a sharp tool
Posté le 12-10-2005 à 22:04:48  profilanswer
 

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... [:google] est ton ami.


Message édité par Emmanuel Delahaye le 12-10-2005 à 22:05:16

---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
n°1221599
cervantes
Posté le 12-10-2005 à 22:25:35  profilanswer
 

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?

n°1221608
Emmanuel D​elahaye
C is a sharp tool
Posté le 12-10-2005 à 22:43:05  profilanswer
 

cervantes a écrit :

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?


Ca parait un peu évident, non ? Sinon, tu lis la doc.
Yack :  
http://alain.debord.club.fr/bestiaire/yack.jpg
Bison:
http://www.fnal.gov/pub/about/campus/ecology/images/bison.jpg


---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
n°1233941
jesus_chri​st
votre nouveau dieu
Posté le 28-10-2005 à 23:14:58  profilanswer
 
n°1820877
jcop
yeah !
Posté le 02-12-2008 à 18:02:13  profilanswer
 

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 ?


Message édité par jcop le 02-12-2008 à 18:10:34
n°1820938
gilou
Modérateur
Modzilla
Posté le 02-12-2008 à 20:35:53  profilanswer
 

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+,


Message édité par gilou le 02-12-2008 à 20:36:14

---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
n°1821021
jcop
yeah !
Posté le 03-12-2008 à 01:15:24  profilanswer
 

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

n°1821245
gilou
Modérateur
Modzilla
Posté le 03-12-2008 à 13:36:23  profilanswer
 

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.
 
 
    * yy_scan_string(const char *str)
    * ...scans a NUL-terminated string.
    * yy_scan_bytes(const char *bytes, int len)
    * ...scans len bytes (including possibly NUL's) starting at location bytes.
 
 
 
Note that both of these functions create and scan a copy of the string or bytes. (This may be desirable, since yylex() modifies the contents of the buffer it is scanning.) You can avoid the copy by using:
 
 
    * yy_scan_buffer(char *base, yy_size_t size)
    * ...which scans in place the buffer starting at base, consisting of
      size bytes, the last two bytes of which must be YY_END_OF_BUFFER_CHAR (ASCII NUL). These last two bytes are not scanned; thus, scanning consists of base[0] through base[size-2], inclusive.
    * If you fail to set up base in this manner (i.e., forget the final two YY_END_OF_BUFFER_CHAR bytes), then yy_scan_buffer() returns a nil pointer instead of creating a new input buffer.
    * The type yy_size_t is an integral type to which you can cast an integer expression reflecting the size of the buffer.


 
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
n°1821721
jcop
yeah !
Posté le 03-12-2008 à 23:44:30  profilanswer
 

OK merci je vais regarder ça !

mood
Publicité
Posté le 03-12-2008 à 23:44:30  profilanswer
 

n°1829240
jcop
yeah !
Posté le 18-12-2008 à 20:31:03  profilanswer
 

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 !

n°1829802
jcop
yeah !
Posté le 20-12-2008 à 13:24:16  profilanswer
 

Bon pour être plus précis les fonctions sont dans le main du fichier bison :
 

Citation :


int main (void)
{
 char* chaine = "1+2+3+4+5*3";
 int my_string_buffer = yy_scan_string (chaine);
 yyparse ();
 yy_delete_buffer (my_string_buffer);
}


 
Quelqu'un a t'il une idée ?

n°1829842
gilou
Modérateur
Modzilla
Posté le 20-12-2008 à 16:15:03  profilanswer
 

:sarcastic:
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+,

Message cité 1 fois
Message édité par gilou le 20-12-2008 à 16:25:44

---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
n°1829864
sligor
Posté le 20-12-2008 à 18:25:38  profilanswer
 

gilou a écrit :


De plus, la chaine doit être terminée correctement par un \0:
 char* chaine = "1+2+3+4+5*3\0";  


c'est pas fait automatiquement ?
 [:pingouino]  

n°1829871
gilou
Modérateur
Modzilla
Posté le 20-12-2008 à 18:50:57  profilanswer
 

En y repensant, oui, ca doit être la cas, c'est quand on passe un buffer qu'il faut faire gaffe.
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
n°1830546
jcop
yeah !
Posté le 22-12-2008 à 19:20:44  profilanswer
 

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 :


/* ----------------------------------------------------- */
/* The following code is used to parse in-memory data    */
/*   -> init_lexical_parser: must be called before the   */
/*      grammatical analyzer.                            */
/*   -> close_lexical_parser: must be called after the   */
/*      end of the grammatical analyzer.                 */
/* ----------------------------------------------------- */
 
static YY_BUFFER_STATE buf_state;
void init_lexical_parser(char *src) { buf_state = yy_scan_string(src); }
void close_lexical_parser() { yy_delete_buffer(buf_state); }


 
et dans le fichier contenant le main (qui peut être le fichier yacc) :

Citation :

/* ----------------------------------------------------- */
/* The following code is used to interface with the in-  */
/* -memory lexical parser.                               */
/* ----------------------------------------------------- */
extern void init_lexical_parser(char *src);
extern void close_lexical_parser();
 
int main(...) {
  ...
  init_lexical_parser(chaine_a_parser);
  yyparse();
  close_lexical_parser();
  ...
}


 
Voilà, je vais pouvoir avancer dans mon appli !
 
 


Message édité par jcop le 22-12-2008 à 19:25:18

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

  [LEX && YACC]Peut on les avoir sur Windows?

 

Sujets relatifs
Transfert d'un site de Linux/Apache à Windows/IIScompilation 'statique' d'un script perl pour windows
ActionScript + invite de commande windows [résolu]Scanner les Access Point WIFI sous Windows XP
Windows Xp édition fami' + Qbasicscript PHP style explorateur windows
[Windows NT][Résolu]Récupérer le séparateur de listesEquivalent script shell sous Windows
arreter windows via un .exeLex et Yacc sous windows avec VC++ 6.0 ?
Plus de sujets relatifs à : [LEX && YACC]Peut on les avoir sur Windows?


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR