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 ?
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.
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 ou pas 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 (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