Lex et Yacc sous windows avec VC++ 6.0 ? - C++ - Programmation
Marsh Posté le 10-05-2005 à 16:12:20
oué j'y suis arrivé, et en fait je vois pas trop ton pb ? ![[:god] [:god]](https://forum-images.hardware.fr/images/perso/god.gif)
Marsh Posté le 10-05-2005 à 16:12:36
ah jme rapelle y'avait un gag avec alloca ? 
 
balance les erreurs 
Marsh Posté le 10-05-2005 à 16:43:11
salut, 
oui il y a alloca et d'autres choses chez moi :  
 
--------------------Configuration: calculatrice - Win32 Debug-------------------- 
 
Compiling... 
 
calculatrice.lex.c 
 
calculatrice.y.c 
 
bison.simple(317) : warning C4013: 'yyerror' undefined; assuming extern returning int 
 
bison.simple(323) : warning C4013: 'alloca' undefined; assuming extern returning int 
 
bison.simple(377) : warning C4013: 'yylex' undefined; assuming extern returning int 
 
Linking... 
 
calculatrice.lex.obj : error LNK2001: unresolved external symbol _yywrap 
 
calculatrice.y.obj : error LNK2001: unresolved external symbol _alloca 
 
Debug/calculatrice.exe : fatal error LNK1120: 2 unresolved externals 
 
Error executing link.exe. 
 
  
 
calculatrice.exe - 3 error(s), 3 warning(s) 
 
  
 
 
Si tu y es arrivé, tu peux me donner la demarche que tu as suivie stp? Que je vois si je fais les bonnes choses (si j'oublie rien) .  MErci 
Marsh Posté le 10-05-2005 à 20:13:50
alloca, tu peux feinter avec un #define alloca malloc (c'est pas joli mais bon) 
yylex est une fonction attendue par yacc. Fous son prototype (cf doc yacc) en haut du .y, apres les includes que tu as pu y mettre 
 
yyerror est une fonction attendue par yacc pour le traitement d'erreur. Regarde son proto dans la doc et fait une implementation (genre qui fait printf("syntax error" ); en bas du .y  (dans la section idoine) 
 
Marsh Posté le 11-05-2005 à 14:06:31
re, 
J'ai finalement reussi a integrer flex et bison a visual  Cela marche bien.
 Cela marche bien. 
Mais depuis que j'essaie de faire fonctionner flex pour c++ et non c, j'ai une erreur avec yylex. J'imagine qu'il faut que j'instancie FlexLexer mais je ne dois pas bien m'y prendre car je n'y arrive pas. 
Vous avez des idées ? 
 
Merci 
Marsh Posté le 11-05-2005 à 14:07:34
bin poste ton erreur
Marsh Posté le 11-05-2005 à 14:11:38
je peux pas exactement car le pc sur lequel je bosse n'a pas acces au net et ce poste n'a pas de lecteurs externe pour des raisons de securité j'imagine... 
 
Mais c'est vraiment qq chose avec int yylex(void) ....  une erreur de liens. 
Voila
Marsh Posté le 11-05-2005 à 14:18:16
ah je crois que je vois ![[:god] [:god]](https://forum-images.hardware.fr/images/perso/god.gif) ou pas
 ou pas ![[:god] [:god]](https://forum-images.hardware.fr/images/perso/god.gif) j'attends le msg d'erreur pour etre sur
 j'attends le msg d'erreur pour etre sur 
 
tu melanges .c et .cpp dans ton exe ?
Marsh Posté le 11-05-2005 à 14:47:22
héhé en fait j'avais oublié que j'ai accés aux mails (mais pas au web en fait) 
Donc voila l'erreur :  
 
 
Performing Custom Build Step on .\calc2.l 
 
Compiling... 
 
calc2.lex.cpp 
 
calc2.y.cpp 
 
Linking... 
 
calc2.y.obj : error LNK2001: unresolved external symbol "int __cdecl yylex(void)" (?yylex@@YAHXZ) 
 
Debug/bisonflex.exe : fatal error LNK1120: 1 unresolved externals 
Error executing link.exe. 
 
bisonflex.exe - 2 error(s), 0 warning(s) 
 
J'ai trouvé qq trucs sur le net, mais je n'arrive pas a reproduire leur methode chez moi (enfin ca marche pas donc .... lol) 
 
++ et merci
Marsh Posté le 11-05-2005 à 14:52:51
grml 
possibilité de gag. Ptet ton yylex de flex est défini en extern "C" ? (fo aller voir le code generé (calc2.lex.cpp), cherche la fonction yylex)
Marsh Posté le 11-05-2005 à 16:08:27
NOn je ne pense pas... Je dis ca car apres avoir bien regardé sur internet, il semblerai que ce genre de problem soit habituel. 
Des solutions de ce genre sont proposées (enfin juste l'idée, pas de code, le code là est de moi et peut donc etre faux..) 
 
%{ 
            #include <iostream> 
            #include "FlexLexer.h" 
            void yyerror(char *); 
            int yylex(void); 
    int sym[26]; 
yyFlexLexer Lexer(reinterpret_cast<istream*>(&std::cin) , reinterpret_cast<ostream*>(&std::cout)); 
%}  
 
int yylex(void) 
{ 
            std::cout << "on entre dans yylex" << std::endl; 
            Lexer.yylex(); 
            std::cout << "on sort de yylex" << std::endl; 
            return 0; 
} 
 
Un autre idée ?
Marsh Posté le 11-05-2005 à 17:57:12
ah bin non, si, c'est ptet bin ca tiens, meme si ca sent grave la colle. Enfin essaye et tu verras ![[:god] [:god]](https://forum-images.hardware.fr/images/perso/god.gif) (sauf que je ferais plutot return Lexer.yylex())
 (sauf que je ferais plutot return Lexer.yylex()) 
Marsh Posté le 12-05-2005 à 09:57:21
Oui il semble que c'etait bien ça  
 
En fait j'aurai du essayer de mieux interpreter mes erreurs quand j'essaiyais ça.  J'obtenais une parseur error. Je pensais que c'etait le parseur qui etait mal initialisé avec ma méthode. Mais en fait non, cela venait de mes regles de grammaire qui etaient mauvaise semble t'il. Je veins de repartir d'une grammaire vérifiée avant, et maintenant cela marche bien  
 
 
Merci de ton aide dans tout les cas, et j'espere que cela servira à d'autres personnes. 
++
Marsh Posté le 20-01-2009 à 17:11:32
salut 
 
je débute en ce moment avec lex et yacc, j'utilise Parser generator pour créer les fichier .l et .y, pour l'instant tous se passe bien mais je voudrais les tester là est le problème. comment je fais pour tester les fichiers .c généré 
j'ai essayé visual studio 2008 mais j'ai pas su le configurer (meme avec flex et bison). 
je crois que kiroukou l'a fais, pouvez vous me donner des indications pour cela? 
je travaille sous windows. 
des tuto pour lex et yacc sous win sont les bienvenues
Marsh Posté le 20-01-2009 à 17:51:27
EN remplacemnt à lexx/yacc, y a Boos::spirit qui permet de faire du lexx/yacc diretc dnas un source C++
Marsh Posté le 21-01-2009 à 13:12:11
wow, quand même ! 
 
Joel t'as dit qu'au lieu d'utiliser lexx/yacc utilise Boost::spirit
Marsh Posté le 21-01-2009 à 14:30:20
salut 
 
ok merci!! 
c juste que les outils que j'utilise sont imposés mais merci comeme!! 
cordialement
Marsh Posté le 21-01-2009 à 18:49:31
ouais, alors je comprends mieux. 
En français on dit "quand même" pas comeme ...
Marsh Posté le 22-01-2009 à 08:44:16
wé mé vous savez , c les habitudes du langage sms!! 
on a tendance à tout abréger!! 
 
je prends pas ça mal mais attention, ça peut vexer! 
 
Marsh Posté le 22-01-2009 à 09:58:17
| mina86 a écrit : wé mé vous savez , c les habitudes du langage sms!! je prends pas ça mal mais attention, ça peut vexer! | 
wé mé vous savé, le sms C mal !!! (et ça coute pas plus cher de bien manger)
Marsh Posté le 10-05-2005 à 16:09:27
Bonjour à tous,
 )?
 )? 
 
 
Voila je suis à la recherche de logiciels ou d'une methode me permettant d'utiliser lex et yacc sous environnement windows.
J'ai trouvé ceci : http://www.monmouth.com/~wstreett/ [...] -yacc.html
CEla semble fonctionner, mais seulement je suis obligé de bosser sous windows donc, et avec Visual C++ 6.0. Et les 2 fichiers C générés ne semblent pas reellement compatibles avec ce compilateur.
Est ce que des gens y sont arrivés (et si oui comment bien sur
Ou existe t'il d'autres outils qui me permettront de realiser ceci ?
Merci d'avance