[Flex & Bison] Problème avec yyFlexLexer
Bonjour à tous,
Bah voila, peut etre avez vous vu mes anciens sujets sur des problemes avec lex et yacc, et bien en voila un autre :)
Mon projet marche bien avec les entrées par defaut de yyFlexLexer, a savoir les entrees sorties sur l'ecran.
Maintenant si j'essaie de lui dire, prend comme entrée le fichier suivant (ce qui est le but final), là ca plante ... :x Error memory (acces violation je crois ) etc..
Voila en gros mon fichier yacc :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49
|
%{
//Pour enlever les warnings du compilateur de visual C++ 6.0
#pragma warning(disable:4786)
#include <iostream>
#include <vector>
#include <fstream>
#include <string>
#include <FlexLexer.h>
// -- prototypes des fonctions obligatoires
void yyerror(char *);
int yylex();
// -- variable globale qui est mon scanner
yyFlexLexer* lexer;
%}
//La grammaire non montree ici
void yyerror(char *s)
{
fprintf(stderr, "%s\n", s);
}
int yylex(void)
{
return lexer->yylex() ;
}
int main(int argc, char** argv)
{
std::ifstream yyin("in.txt");
if(!yyin)
{
std::cerr << "Impossible de lire le fichier source" << std::endl;
exit(1);
}
//Des cast qui sont normalement corrects
lexer = new yyFlexLexer(reinterpret_cast<class istream *>(&std::cin), reinterpret_cast<class ostream *>(&std::cout));
try
{
yyparse();
}
catch ( ... ) // traite toutes les exceptions
{
std::cerr << "Erreur inconnue. Ligne : " << lexer->lineno() << std::endl;
}
return 0;
} |
J'utilise donc flex et bison sous windows et je travaille avec Visual C++ 6.0
Je ne comprend pas trop pourquoi cela ne marche pas. Et si l'erreur vient d'ailleurs , comment la voir ?
Merci d'avance
++