Skip to content

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Repository files navigation

⚙️ Mini-Compilateur Python (Analyse Lexicale et Syntaxique)

Java Théorie des langages

📝 Description

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).


🛠️ Architecture et Fonctionnalités

1. Analyseur Lexical (Scanner)

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) et RTAB (sortie de bloc) pour structurer le code.

2. Analyseur Syntaxique (Parser)

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éthode InstructionFor()).

3. Gestion Avancée des Erreurs

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.

📊 Grammaire Supportée

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.

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages