int analyser_mot(char c) {
	int count = 1;
	
	if (c == '$') {
	//	printf("analyser_mot VARIABLE c = %c \n", c);
		while(count < YYTEXT_MAX - 80) {
			c = lireCar();

			if (count < YYTEXT_MAX && !(is_num(c) || is_min(c) || is_maj(c) || c == '_')) {
				/*//printf("BEFORE, count = %i\n", count);
				for (int i = 0; i < YYTEXT_MAX - 1; i++) 
					printf("%c",yytext[i]);
				printf("\n");*/
				delireCar();
				/*printf("AFTER\n");
				for (int i = 0; i < YYTEXT_MAX - 1; i++) 
					printf("%c",yytext[i]);
				printf("\n");*/
				return ID_VAR;
			}
			else if (count >= YYTEXT_MAX) {
				delireCar();
				return -1;
			}
			count++;	
		} 
	}
	if (is_num(c)) {
		//printf("analyser_mot NUMBER c = %c \n", c);
		while(1) {
			c = lireCar();
			//printf("%c\n", c);
			if (!is_num(c)) {
				delireCar();
				return NOMBRE;
			} 
		}
	}
	//printf("analyser_mot FUNCTION/KEYWORD c = %c \n", c);
	while(count < YYTEXT_MAX) {
		c = lireCar();
		//printf("%c\n", c);
		if (count == YYTEXT_MAX - 1 && c != '(') {
			delireCar();
			return -1;
		}
		//printf("test1\n");
		if (!(is_num(c) || is_min(c) || is_maj(c) || c == '_')) {
			delireCar();
			int resultat = estMotClef();
			if (resultat != -1)
				return resultat;
			return ID_FCT;
		}
		count++;
	}
	return -1;
}
/*******************************************************************************
 * Fonction principale de l'analyseur lexical, lit les caractères de yyin et
 * renvoie les tokens sous forme d'entier. Le code de chaque unité est défini 
 * dans symboles.h sinon (mot clé, idententifiant, etc.). Pour les tokens de 
 * type ID_FCT, ID_VAR et NOMBRE la valeur du token est dans yytext, visible 
 * dans l'analyseur syntaxique.
 ******************************************************************************/
int yylex(void)
{
  //char nom[100];
  //char valeur[100];
  char c;
  yytext[yyleng = 0] = '\0';
  if(mangeEspaces() == -1) 
    return FIN; 
     
  c = lireCar();
  int resultat = estSymboleSimple(c);
  if ( resultat != -1 ) {
 //nom_token(resultat,nom,valeur);
 //printf("token: %d  nom:%s  valeur: %s\n",resultat,nom,valeur);
    return resultat;
  }
  //int resultate = analyser_mot(c);
  //nom_token(resultate,nom,valeur);
 // printf("token: %d  nom:%s  valeur: %s\n",resultate,nom,valeur);
  
  return analyser_mot(c);
  
}
/*******************************************************************************
 * Fonction principale de l'analyseur lexical, lit les caractères de yyin et
 * renvoie les tokens sous forme d'entier. Le code de chaque unité est défini 
 * dans symboles.h sinon (mot clé, idententifiant, etc.). Pour les tokens de 
 * type ID_FCT, ID_VAR et NOMBRE la valeur du token est dans yytext, visible 
 * dans l'analyseur syntaxique.
 ******************************************************************************/
int yylex(void)
{
  char c;
  int i;
  yytext[yyleng = 0] = '\0';
  
  if (mangeEspaces() == -1)
    return FIN;

  c = lireCar();


  // Symbole simple
  for( int i = 0; tableSymbole[i] != '\0'; ++i ) {
    if( c == tableSymbole[i] ) {
      return codeSymbole[i];
    }
  }

  // Nombre
  if( is_num( c ) )
  {
    do {
      lireCar();
    } while( is_num( yytext[yyleng-1] ) );
    delireCar();

    return NOMBRE;
  }

  //id_var
  if( c == '$' ) {
    i = 1; // 1 pour $

    do {
      lireCar();
      i++;
    } while( is_alphanum( yytext[yyleng-1] ) );
    i--;
    delireCar();


    if(i > 99) {
      return -1;
    }
    
    return ID_VAR;
  }

  // Mot clefs
  do {
    lireCar();
  } while( is_alphanum( yytext[yyleng-1] ) );
  delireCar();

  for( int i = 0; tableMotsClefs[i] != '\0'; ++i )
  {
    if( strcmp( tableMotsClefs[i], yytext ) == 0 ) {
        return codeMotClefs[i];
    }
  }

  for(; yyleng != 1; delireCar() );

  //id_fct
  if( is_alpha( c ) ) {
    int i = 1; // 1 pour $

    do {
      lireCar();
      i++;

    } while( is_alphanum( yytext[yyleng-1] ) );
    i--;
    delireCar();

    if(i > 99) {
      return -1;
    }

    return ID_FCT;
  }

  erreur("Aucune Correspondance");  
  return -1;
}