Bonjour tout le monde,j'essaye depuis hier de lire correctement un fichier avec lex et yacc mais je lis seulement le premier symbole et puis rien d'autre.
Exemple : si j'ai prog exemple1 je lis seulement le prog et puis le reste n'ai pas reconnu.Je n'arrive pas à trouver le problème,voici mon code Lex :
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
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
 
%{
#include "declarations.h"
#include "tpsyn_tab.h"
 
%}
lettre [A-Za-z]
chiffre [0-9]
id {lettre}+({lettre}|{chiffre})*
nb {chiffre}+
faux {nb}{id}
 
opaffect ["="]
oprel ("<"|"<="|"=="|"<>"|">"|">=")
opadd ("+"|"-"|"or")
opmul ("*"|"/"|"div"|"mod"|"and")
 
A [/]
B[*]
C [^/*]
 
commentaire {A}({A}.*|{B}({A}|{C}|{B}+{C})*{B}+{A})
 
%%
 
 
"prog"          { printf("mot cle %s \n",yytext);return PROGRAMME;}
"begin"         return DEBUT;
"end"           return FIN;
"var"           { printf("mot cle %s \n",yytext);return DECLARATION;}
"if"            return SI;
"then"          return ALORS;
"else"          return SINON;
"while"         return TANT_QUE;
"do"            return FAIRE;
"not"           return NON;
"proc"          return PROCEDURE;
"func"          return FONCTION;
"int"           return TYPE;
 
{opmul}         return OPERATION;
{opaffect}      return AFFECTATION;
{oprel}         return COMPARAISON;
{opadd}         return AJOUT;
 
"("             return '(';
")"             return ')';
"."             return '.';
","             return ',';
":"             return ':';
";"             return ';';
 
"\t"            ;
"\n"            nb_l++;
 
{id}         {printf("mot cle %s \n",yytext);yylval.chaine=strdup(yytext);return IDENT;}
{nb}        {yylval.entier=atoi(yytext);return NBRE;}
 
                                                                                                                 
{commentaire} {/* pas d'action */ nb_l++;}
{faux} { printf("\nErreur ligne %d : erreur lexicale !", nb_l); } 
.  { printf("\nErreur ligne %d : erreur lexicale !", nb_l); } 
 
%%

Et le main situé dans le fichier yacc :


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
     /* fonction pour la fin de fichier */
int yywrap(void) {
return 1;
}
 
/* fonction pour les erreurs */    
void yyerror()
{
        fprintf(stderr, "\nErreur ligne %d : erreur de syntaxe !", nb_l);
        compil_reussie=0;
}    
int main(int argc,char * argv[]) {
 
yyin=fopen("C:\\Users\\Mehdi\\Desktop\\exemple1.txt", "r");
if(!yyin){
          printf("impossible d'ouvrir le fichier \n");
          exit(1);
          }         
yyparse();
getch();
return 0; 
 
}
-Voilà ça serait sympa de m'aider si vous avez déjà rencontré le problème,merci.