Mini-Rapport – Analyseur do..
while en Java
1. Grammaire choisie
La grammaire gérée par l’analyseur inclut uniquement les instructions autorisées par le projet :
déclaration de variables, affectation, incrémentation/décrémentation, structures de contrôle (if/else,
while, do/while, for, switch/case) et expressions arithmétiques/logiques.
Grammaire simplifiée pour do..while (EBNF) : <programme> ::= <do_while> <do_while> ::= "do"
"{" { <instruction> } "}" "while" "(" <expression_logique> ")" ";" <instruction> ::= <declaration_variable> |
<affectation> | <incrementation_decrementation> <expression_logique> ::= <expression_arithmetique>
<operateur_relationnel> <expression_arithmetique> | "(" <expression_logique> ")"
<expression_arithmetique> ::= <term> { <operateur_arithmetique> <term> } <term> ::= <nombre> |
<identificateur> | "(" <expression_arithmetique> ")" <operateur_arithmetique> ::= "+" | "-" | "*" | "/" |
"%" <operateur_relationnel> ::= "==" | "!=" | "<" | "<=" | ">" | ">="
2. Analyseur lexical
• Lit la chaîne caractère par caractère.
• Reconnaît les lexèmes :
• Mots-clés : do, while, if, else, for, switch, case, int, double, boolean, char, String
• Identificateurs
• Nombres
• Opérateurs : +, -, *, /, %, ++, --, =, ==, !=, <, <=, >, >=
• Symboles : ;, {, }, (, )
• Détecte les erreurs lexicales : caractères non valides, identificateurs incorrects.
Exemple de lexème détecté pour "do { int x = 5; x++; } while (x < 10)" : KW_do, SYM_{, KW_int, ID_x, OP_=,
NUM_5, SYM_;, ID_x, OP_++, SYM_;, SYM_}, KW_while, SYM_(, ID_x, OP_<, NUM_10, SYM_), SYM_;
3. Analyseur syntaxique
• Implémenté en descente récursive.
• Vérifie la structure do { instructions } while (condition);
• Analyse chaque instruction dans le bloc {} et la condition ().
• Détecte les erreurs syntaxiques :
• do manquant
• { ou } manquant
• while absent
• Parenthèses ou ; manquants
• Instruction invalide dans le bloc
4. Structure du projet (arborescence)
ProjetAnalyseDoWhile/ ├── src/
│ ├── AnalyseLexicale.java │ ├── AnalyseSyntaxique.java │ ├── GestionErreur.java │ └──
Main.java ├── tests/
│ ├── test1.txt │ └── test2.txt ├── doc/
│ └── mini-rapport.pdf └── README.md
1
5. Cas de test
Cas valide : do { int x = 1; x++; } while (x <= 5);
Lexical : KW_do, SYM_{, KW_int, ID_x, OP_=, NUM_1, SYM_;, ID_x, OP_++, SYM_;, SYM_}, KW_while, SYM_(,
ID_x, OP_<=, NUM_5, SYM_)
Syntaxique : Analyse terminée sans erreur.
Cas invalide : do int x = 1 while x <= 5
Erreurs détectées : Erreur syntaxique : '{' attendu après do Erreur syntaxique : ';' attendu après
affectation Erreur syntaxique : '(' attendu après while Erreur syntaxique : ')' attendu après condition
Erreur syntaxique : ';' attendu à la fin
6. GitHub et suivi
• Commits réguliers :
• Ajout de l’analyseur lexical
• Ajout de l’analyseur syntaxique
• Intégration de la gestion des erreurs
• Ajout des cas de test et documentation