/******************************************************************************* * 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; }