[Lex/Yacc] Lecture fichier
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:
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:
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.