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