Lex et Yacc sous windows avec VC++ 6.0 ?

Lex et Yacc sous windows avec VC++ 6.0 ? - C++ - Programmation

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  :D

Reply

Marsh Posté le 10-05-2005 à 16:09:27   

Reply

Marsh Posté le 10-05-2005 à 16:12:20    

oué j'y suis arrivé, et en fait je vois pas trop ton pb ? [:god]


---------------
NP: HTTP Error 764 Stupid coder found
Reply

Marsh Posté le 10-05-2005 à 16:12:36    

ah jme rapelle y'avait un gag avec alloca ?
 
balance les erreurs :o


---------------
NP: HTTP Error 764 Stupid coder found
Reply

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 :)

Reply

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)
 


---------------
NP: HTTP Error 764 Stupid coder found
Reply

Marsh Posté le 11-05-2005 à 14:06:31    

re,
J'ai finalement reussi a integrer flex et bison a visual :) 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 :)

Reply

Marsh Posté le 11-05-2005 à 14:07:34    

bin poste ton erreur


---------------
NP: HTTP Error 764 Stupid coder found
Reply

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

Reply

Marsh Posté le 11-05-2005 à 14:18:16    

ah je crois que je vois [:god] ou pas [:god] j'attends le msg d'erreur pour etre sur
 
tu melanges .c et .cpp dans ton exe ?


---------------
NP: HTTP Error 764 Stupid coder found
Reply

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

Reply

Marsh Posté le 11-05-2005 à 14:47:22   

Reply

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)


---------------
NP: HTTP Error 764 Stupid coder found
Reply

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 ?

Reply

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] (sauf que je ferais plutot return Lexer.yylex())


---------------
NP: HTTP Error 764 Stupid coder found
Reply

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

Reply

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

Reply

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

Reply

Marsh Posté le 21-01-2009 à 08:59:42    

salut,
jai vraiment pas compris la réponse
désolé

Reply

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


---------------
je connais tout, je ne sais rien, seule certitude, à vouloir trop on finit par tout perdre.
Reply

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

Reply

Marsh Posté le 21-01-2009 à 18:49:31    

ouais, alors je comprends mieux.
En français on dit "quand même" pas comeme ...

Reply

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!
 

Reply

Marsh Posté le 22-01-2009 à 09:58:17    

mina86 a écrit :

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!

 


 

wé mé vous savé, le sms C mal !!! (et ça coute pas plus cher de bien manger)


Message édité par kyntriad le 22-01-2009 à 09:58:59

---------------
You can't start a fire with moonlight
Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed