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 ... Error memory (acces violation je crois ) etc..
Voila en gros mon fichier yacc :
J'utilise donc flex et bison sous windows et je travaille avec Visual C++ 6.0
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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; }
Je ne comprend pas trop pourquoi cela ne marche pas. Et si l'erreur vient d'ailleurs , comment la voir ?
Merci d'avance
++
Partager