Problème flex/bison

Fermé
zac - Modifié le 20 sept. 2017 à 12:49
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)