Bonjour, je suis pas sûr de poster au bon endroit, mais comme y'a pas de topics dédiés à yacc et lex, je viens ici...
Alors voilà mon problème : J'ai fait un fichier lex qui me lit des chiffres sur stdin et les envoie au fichier yacc que j'ai créé, et qui est sensé écrire ce chiffre sur stdout ; le hic, c'est que ça marche au premier essai, mais pas au second (en supposant que je ne redémarre pas l'appli entre les deux essaies bien sur). Voilà le code, simplifié, mais qui reproduit l'erreur :
Le fichier Lex :
Et le fichier Yacc :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 %{ #include "y.tab.h" extern YYSTYPE yylval; %} chiffre [0-9] %% {chiffre}+ yylval.number = atoi(yytext); return ENTIER; %%
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 %{ #include<stdio.h> %} %union { int number; } %token ENTIER %start liste %% liste : ENTIER {printf("%d\n", $1);} ; %% int yyerror(char *msg) { printf("Erreur : %s\n", msg); return 0; } int main() { yyparse(); return 0; }
Et donc, sur cygwin ça donne ceci :
$ ./prg [--> lancement de l'appli]
4 [--> je tape un chiffre]
4 [--> le chiffre est reproduit]
1 [--> je tape un second chiffre]
Erreur : Syntax error [erreur !!]
J'arrive pas à comprendre d'où ça vient !! Alors si quelqu'un a une idée, merci d'avance !!!
Partager