Bonjour,
J'aimerais savoir comment faire en sorte que flex ne détecte pas les espace car cela fait bugé mon programme
Voici le code :
/*déclarations*/
%{
#include <stdlib.h>
#include <stdio.h>
#include <stdbool.h>
void lexeme(void);
unsigned int lineno=1;
bool error=false;
%}
nombre 0|[1-9][[:digit:]]*
variable [[:alpha:]][[:alnum:]]*
/*fin des déclarations*/
%%
{nombre} {
printf("\tNombre trouve a la ligne %d. Il s'agit du nombre %s et comporte %d chiffre(s)\n",lineno,yytext,yyleng);
}
"afficher" {lexeme();}
"=" {lexeme();}
"+" {lexeme();}
"-" {lexeme();}
"*" {lexeme();}
"/" {lexeme();}
"(" {lexeme();}
")" {lexeme();}
"et" {lexeme();}
"ou" {lexeme();}
"non" {lexeme();}
";" {lexeme();printf("\n");}
"vrai" {lexeme();}
"faux" {lexeme();}
"\t" {lineno++;}
"\n" {lineno++;}
"blank" {lineno++;}
"#!Shebang/prog.sh" {lineno++;}
{variable} {
printf("\tVariable trouvee a la ligne %d. Il s'agit de %s et comporte %d lettre(s)\n",lineno,yytext,yyleng);
}
. {
fprintf(stderr,"\tERREUR : Lexeme inconnu a la ligne %d. Il s'agit de %s et comporte %d lettre(s)\n",lineno,yytext,yyleng);
error=true;
}
%%
/*code additionnel*/
int main(){
printf("Debut de l'analyse lexicale :\n");
yylex();
printf("Fin de l'analyse !\n");
printf("Resultat :\n");
if(error){
printf("\t-- Echec : Certains lexemes ne font pas partie du lexique du langage ! --\n");
}
else{
printf("\t-- Succes ! --\n");
}
return EXIT_SUCCESS;
}
void lexeme(){
printf("\tLexeme '%s' trouve a la ligne %d\n",yytext,lineno);
}
int yywrap(){
printf("\tFin de fichier detecte !\n");
return 1;
}
et le programme :
monEntier = 6 ; monBooleen = faux ;
afficher monEntier ;
afficher monBooleen ;
afficher 4 ;
afficher non ( ( vrai et faux ) ou vrai ) ;
afficher 6/3 ;
@#!%^$
mais il me dit : ERREUR : Lexeme inconnu a la ligne 8. Il s'agit de et comporte 1 lettre(s)