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

A présenter lors de la séance du 24 novembre 2005.

Le but de cette partie est d'écrire un analyseur syntaxique pour le langage Zwei.

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 l'objet 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 l'objet 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.

Le programme de test ParserTest.scala vous permet de tester votre analyseur syntaxique. Il lit un fichier source et affiche un message d'erreur si l'entrée n'est pas correcte.

Pour lancer le programme à partir du répertoire racine de votre projet, utilisez la commande suivante :

      scala -cp ./classes zweic.ParserTest fichier-source
    

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

Canevas Scala

Name.scala : Cette classe permet d'associer un nom avec un symbole.

Operators.scala : Cet objet définit toutes les classes d'opérateurs pouvant apparaître dans l'arbre syntaxique.

Tree-partial.scala (à renommer en Tree.scala) : 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.scala (à renommer en Parser.scala) : Cette classe implante l'analyseur syntaxique. A vous d'écrire la partie manquante du code.

ParserTest.scala : Cet objet 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 :

      SC_SOURCES	+= sources/zweic/Name.scala
      SC_SOURCES	+= sources/zweic/Operators.scala
      SC_SOURCES	+= sources/zweic/Tree.scala
      SC_SOURCES	+= sources/zweic/Parser.scala
      SC_SOURCES	+= sources/zweic/ParserTest.scala
    

Le fichier compressé part2.zip contient tous les fichiers Scala dont vous avez besoin pour la partie 2 (part2.zip contient également les fichiers fournis pour la partie 1).

Canevas Java

Les fichiers fournis avec le canevas Java sont: Makefile, build.xml, Name.java, Tree-partial.java, Parser-partial.java, ParserTest.java.

Le fichier compressé part2-java.zip contient tous les fichiers Java dont vous avez besoin pour la partie 2 (part2-java.zip contient également les fichiers fournis pour la partie 1)