Ce projet est un mini-compilateur développé en Java dans le cadre du module universitaire de Compilation. Il a été conçu pour analyser un sous-ensemble du langage Python, en mettant l'accent sur la structure de contrôle itérative for.
Le défi technique majeur de ce projet a été de gérer la structure par indentation (propre à Python), qui remplace les délimiteurs de blocs traditionnels (comme les accolades).
Ce module lit le flux de caractères brut et le segmente en unités logiques (Tokens).
- Approche Hybride : Utilisation d'une boucle de lecture linéaire combinée à un Automate Fini Déterministe matriciel pour la validation stricte des identificateurs et des nombres.
- Gestion Dynamique de l'Indentation : À chaque saut de ligne, l'analyseur calcule la profondeur d'indentation et génère automatiquement des tokens virtuels
LTAB(entrée de bloc) etRTAB(sortie de bloc) pour structurer le code.
Ce module vérifie que la suite de tokens générée respecte la structure grammaticale du langage.
- Méthode LL(1) : Implémentation d'une analyse descendante récursive (lecture de gauche à droite, 1 token d'avance), garantissant une grande efficacité sans nécessité de revenir en arrière.
- Correspondance directe : Chaque règle de la grammaire est traduite par une méthode Java dédiée (ex: la règle
<FOR>correspond à la méthodeInstructionFor()).
Le compilateur est conçu pour être robuste face aux erreurs de syntaxe :
- Il ne s'arrête pas brutalement à la première faute rencontrée.
- Il signale l'erreur avec un message précis indiquant la ligne et le token manquant.
- Il intègre un mécanisme de récupération (resynchronisation) en consommant le token problématique pour continuer l'analyse du reste du fichier.
L'analyseur prend en charge plusieurs structures fondamentales :
- Boucle itérative stricte (
for ... in range(...)). - Déclarations de classes et de méthodes.
- Affectations de variables et instructions d'affichage (
print). - Expressions mathématiques récursives avec gestion des opérateurs de base.