Logo EPFL
LAMP
Ecole Polytechnique Fédérale de Lausanne
Compilation 2004/2005
French only
Partie 2 : Analyseur syntaxique

A présenter lors de la séance du 26 novembre 2004.

  But

Le but de cette partie est d'écrire un analyseur syntaxique pour le langage eins. Pour l'instant, votre analyseur doit simplement vérifier que l'entrée est syntaxiquement correcte mais ne doit pas construire l'arbre syntaxique. Si l'entrée est correcte, votre analyseur doit donc simplement s'arrêter, sinon, il doit signaler au moins une erreur.

Votre travail est de réaliser l'analyseur syntaxique en complétant la classe Parser. Nous vous suggérons d'utiliser la technique de la descente récursive. Avec cette technique, la correspondance entre la grammaire au format EBNF et le code source de l'analyseur syntaxique est assez directe : à chaque symbole non-terminal de la grammaire syntaxique, on peut associer une méthode de l'analyseur qui reconnaît les phrases dérivables à partir de ce symbole.

Bien que pour l'instant vous ne deviez pas construire d'arbre syntaxique, nous vous conseillons de faire en sorte que toutes vos méthodes d'analyse retournent déjà une valeur de type Tree ou Tree[], car cela simplifiera sa modification ultérieure. Pour l'instant, retournez simplement la valeur null.

La classe Parser fournit deux méthodes error pour signaler des erreurs. Si celles-ci ne conviennent pas, vous pouvez aussi directement appeler les méthodes de la classe Report.

Pour cette partie, tout comme pour la précédente, vous pouvez vous contenter de détecter la première erreur. C'est pourquoi, les deux méthodes error appellent une méthode fail de la classe Report. Tout appel à l'une de ces deux méthodes termine donc aussi l'analyse en cours. Si vous désirez pouvoir signaler plusieurs erreurs, il vous faudra probablement changer cela et remplacer l'appel à fail par un appel à error.

Ci-dessous, les fichiers qui vous sont fournis pour cette partie.

Tree-partial.java (à renommer en Tree.java) : Cette classe acueillera, par la suite, la définition des différents noeuds de l'arbre syntaxique. Pour l'instant elle est vide et sert uniquement à définir la classe Tree afin que les méthodes de l'analyseur syntaxique puissent être déclarées avec un tel type de retour.

Parser-partial.java (à renommer en Parser.java) : Cette classe implante l'analyseur syntaxique. A vous d'écrire la partie manquante du code.

ParserTest.java : Cette classe définit un programme qui vous permet de tester votre analyseur syntaxique. Il lit un fichier source et l'analyse.

Pour pouvoir continuer à utiliser le Makefile, il vous faut y déclarer les nouveaux fichiers. Pour cela, ajoutez y les lignes suivantes :

      JC_SOURCES	+= sources/einsc/Tree.java
      JC_SOURCES	+= sources/einsc/Parser.java
      JC_SOURCES	+= sources/einsc/ParserTest.java