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 :
-Voilà ça serait sympa de m'aider si vous avez déjà rencontré le problème,merci.
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; }
Partager