Computer Science Department
Programming Methods Laboratory
(LAMP)
Ecole Polytechnique Federale de Lausanne
Programmation Avancée et Compilation     semestre d'été 2000

Projet - Séance 1 (24.03.2000)

Préparation
Analyseur lexical

Préparation

Installation des fichiers

Téléchargez le fichier jex-start.tar.gz et décompressez le avec la commande suivante:
  gtar xvzf jex-start.tar.gz 
Cette opération crée un répertoire jex contenant tous les fichiers nécessaires pour le premier exercice.

Utilisation du Makefile

Le répertoire jex contient un fichier Makefile qui permet de compiler le projet, de lancer des programmes java et de nettoyer.

Pour le compiler le projet, utilisez la commande
  gmake all
ou plus simplement
  gmake
Pour lancer un programme java, vous pouvez utiliser la commande suivante:
  gmake run.<class>
Par exemple pour tester l'analyseur lexical, vous pouvez utiliser la commande suivante:
  gmake run.jex.ScannerTest
Si vous avez des arguments a fournir à votre programme java, utilisez la variante ci-dessous:
  gmake run.<class> ARGS="<vos arguments>"
Parfois il est utile de nettoyer, c'est à dire supprimer tous les fichiers générés lors des compilations. Pour cela, utilisez la commande suivante:
  gmake clean

Modification du Makefile

En aucun cas, vous ne devez modifier le fichier Makefile. En effet, il sera remplacé par une version plus complète lors des prochains exercices et il vous faudrait refaire tous vos changements. Si vous avez besoins de faire des changements faites les dans le fichier Makefile.cfg.

Variables d'environnement

Si vous désirez compiler certains fichiers ou exécuter certains programmes sans utiliser gmake, il vous faut définir les variables d'environnement suivantes:
  setenv JEX_HOME  <chemin absolu du répertoire jex>
  setenv JLEX_JAR  $JEX_HOME/jars/jlex.jar
  setenv JCUP_JAR  $JEX_HOME/jars/jcup.jar
  setenv OUTPUTDIR $JEX_HOME/classes
  setenv CLASSPATH ${OUTPUTDIR}:${JCUP_JAR}:${JLEX_JAR}
En fait, seule la variable CLASSPATH est vraiment indispensable. Les autres ne sont utilisées que pour racourcir certaines commandes. Afin de ne pas devoir redéfinir ces variables à chaque nouvelle session, il vous est conseillé de mettre ces définitions dans votre fichier .login ou .cshrc ou dans un fichier dont vous pouver faire un source.

Analyseur lexical

Votre travail

Le fichier jex.lex contient un analyseur lexical à compléter. Vous devez rajouter les expressions regulières (ainsi que le code correspondant) permettant de reconnaître:
  • les signes de ponctuation, parenthèses, etc
  • les opérateurs
  • les mots-clés
  • les identificateurs
  • les chaînes de caractères
  • les commentaires
Vous devez également compléter la fonction representation(int token) afin qu'elle retourne une représentation adéquate pour chacun des lexèmes (tokens).

Comment compiler

Pour compiler l'ensemble du projet utilisez la commande ci-dessous. Celle-ci compile l'analyseur lexical, puis le fichier java résultant ainsi que tous les autres fichiers java qui n'ont pas encore été compilés.
  gmake
Si vous ne désirez compiler que l'analyseur lexical, utilisez la commande suivante:
  gmake jlex
Si vous préférez ne pas utilisez gmake, vous pouvez aussi utiliser les commandes suivantes pour compiler l'analyseur lexical:
  java jlex.Main jex.lex
  mv jex.lex.java Scanner.java
puis,
  javac -d $OUTPUTDIR *.java
pour compiler les fichiers java. Toutefois, si vous n'utilisez pas gmake, pensez à créer le répertoire $OUTPUTDIR avant de lancer votre première compilation java.

Comment tester

Le répertoire examples contient un programme factorial.jex ne comportant aucune erreur lexicale. Voici comment l'utiliser pour tester votre analyseur:
  gmake run.jex.ScannerTest < examples/factorial.jex
ou, sans utiliser gmake:
  java jex.ScannerTest < examples/factorial.jex
Ce programme ne devrait générer aucune erreur, donc aucun message Illegal character. Bien entendu, une analyse correct de ce fichier ne sera pas suffisante pour valider votre analyseur. Il vous est fortement conseillé de vous faire vos propres programmes de test afin de vérifier que votre analyseur reconnaît correctement tous les lexèmes. En particulier, faites des tests pour vérifier que les commentaires et les chaînes de caractères sont correctement traités.


Teaching
LAMP homepage
Last modified: 27.04.2000, Philippe Altherr <philippe.altherr@epfl.ch>