DLP : Développement d’un langage de programmation
Master STL, Université Pierre et Marie Curie
Année 2016–2017
TME 1 – Installation et programmation en ILP1
Christian Queinnec & Antoine Miné
La séance est divisée en deux parties. Dans la première, vous installerez les outils nécessaires,
afin de pouvoir les utiliser dans la seconde partie.
1 Installation de l’environnement de travail
Objectif : obtenir un environnement de travail incorporant les outils et les programmes du
cours, utiles à tous les TME.
Buts :
identifier et localiser les outils ;
installer l’environnement de travail ILP1 ;
exécuter la base de tests intégrée à ILP1 afin de vérifier que tout fonctionne correctement.
Note importante : vous travaillez en binôme pendant les TME, mais les examens sont indivi-
duels. Il est donc indispensable que chacun installe un environnement de travail fonctionnel
dans son répertoire personnel de la PPTI. Lors de l’examen, vous aurez accès à votre répertoire,
mais pas à celui de votre binôme ! Par ailleurs, l’environnement de travail évoluera au fur et à me-
sure du cours (ILP1, puis ILP2, ILP3 et enfin ILP4). Pensez-donc à maintenir votre environnement
de travail à jour. Copiez-y également vos développements de TME au fur et à mesure si ceux-ci
sont hébergés chez votre binôme ; votre travail de TME pourra vous aider lors de l’examen.
1.1 Java 8
Nous travaillons avec Java 8 (ou ultérieur). Cette version est déjà installée à la PPTI. Si vous
souhaitez installer Java 8 sur votre machine personnelle, celui-ci est disponible gratuitement
sur le site d’Oracle : https://www.oracle.com/java. Installez alors la dernière version de l’en-
vironnement Java SE (8u92 au moment de la rédaction de ce sujet) adaptée à votre machine.
1.2 Eclipse
Nous travaillons avec l’environnement de développement Eclipse. Celui-ci est installé sur les
machines de la PPTI et accessible par la commande eclipse. Si vous souhaitez l’installer sur
votre machine personnelle, vous pouvez aller sur le site http://www.eclipse.org et télécharger
la version de Eclipse IDE for Java EE Developers adaptée à votre machine.
Lors de la première utilisation, Eclipse veut savoir où ranger son espace de travail (works-
pace). Utilisez la position par défaut, ~/worskapace, et cochez la case lui demandant de mémo-
riser cette réponse afin qu’il ne vous la pose plus. Attention : ne changez pas d’espace de travail,
c’est là où nous récupérerons vos textes lors des examens !
1
Configuration d’Eclipse. Nous vous conseillons de modifier la configuration d’Eclipse de la
manière suivante :
1. Menu Window > Preferences > Java > Compiler : réglez Compliance level à 1.8 1;
2. Vérifiez qu’Eclipse trouve bien la JVM pour Java 8 : Menu Window > Preferences > Java >
Installed JRE > Add et spécifiez le chemin menant à cette JVM : /usr/lib/jvm/jdk1.8.0_
45 ;
3. Menu Window > Preferences > General > Editors > Text Editors, cochez la case Show Print
Margin qui montre la marge droite située à 80 colonnes. Essayez de ne pas dépasser cette
colonne, c’est une bonne habitude à prendre ;
4. Menu Window > Preferences > General > Editors > Text Editors, cochez la case insert spaces
for tabs (car il ne faut jamais utiliser de tabulations dans les programmes, sauf quand c’est
une convention imposée comme pour les Makefile par exemple) ;
5. Menu Window > Preferences > General > Workspace > Text File Encoding :utf8 ;
6. Menu Window > Preferences > General > Workspace > New text file line delimiter : Unix.
Parmi les problèmes qui parfois surviennent, il y a :
pas assez de place sur votre compte : utilisez la commande quota pour déterminer l’espace
et nettoyez un peu ;
Eclipse est sorti sans avoir effacé le fichier ~/workspace/.metadata/.lock : effacez-le puis
relancez Eclipse ;
Eclipse ne se relance plus et l’erreur figurant dans ~/workspace/.metadata/.log men-
tionne des classes SWT en relation avec le navigateur (browser) : supprimez le répertoire
~/.mozilla/eclipse.
1.3 ILP1
Travail à réaliser : téléchargez les sources d’ILP1 hébergées sur GitHub et configurez un nou-
veau projet Eclipse avec ces sources. La procédure à réaliser est la suivante :
1. ouvrez un shell et placez-vous dans le répertoire workspace (cd ~/workspace) ;
2. lancez les trois commandes Git suivantes :
git config --global http.proxy http://proxy.ufr-info-p6.jussieu.fr:3128
git config --global https.proxy https://proxy.ufr-info-p6.jussieu.fr:3128
git clone https://github.com/CarlosAgon/ILP-UPMC.git
un nouveau répertoire ILP-UPMC doit apparaître dans le dossier workspace.
3. lancez Eclipse ; si vous voyez l’écran d’accueil d’Eclipse (premier lancement), passez à la vue
workbench en cliquant sur le cercle workbench tout en haut à droite ;
4. créez un nouveau projet de type Java (File > New java project) ; dans la case nom du projet,
tapez ILP-UPMC. Au moment où vous finissez de taper le nom du projet, Eclipse détecte
qu’un répertoire ayant ce nom existe et vous propose de le récupérer tel quel ; cliquez alors
sur Finish. Si ce n’était pas le cas, cliquez sur create new project from sources et choisissez
le répertoire workspace/ILP-UPMC ; enfin, cliquez Finish.
5. le projet est presque prêt ; Eclipse va peut-être vous demander s’il faut ouvrir la perspective
Java, répondez affirmativement.
Dans la suite du cours, les sources d’ILP2, ILP3 et ILP4 seront distribuées sur le même projet
GitHub, comme des mises à jour. La récupération des nouvelles sources nécessitera simplement
de synchroniser votre copie locale avec le projet GitHub, par :
git pull
depuis le répertoire ~/workspace/ILP-UPMC.
1. Attention : vous trouverez parfois Java 1.8 et parfois Java 8. Il s’agit de la même version ! Les anciennes versions
de Java sont numérotées 1.0, 1.1, 1.2, 1.3, 1.4, puis Java change de style de numérotation, et passe à Java 5, Java 6,
etc. Toutes les boîtes de dialogue n’ont pas été modifiées pour utiliser le nouveau style de numérotation.
2
1.4 ANTLR 4
La partie analyse syntaxique d’ILP (qui transforme un programme texte à la syntaxe ILPML
en arbre syntaxique Java) utilise ANTLR version 4. ANTLR prend la forme d’une archive JAR (par
exemple, antlr-4.5.3-complete.jar au moment de la rédaction du sujet). Celle-ci devrait
déjà être incluse dans la distribution ILP (dans Java/jars). Si ce n’est pas le cas, l’archive
JAR est également téléchargeable sur le site http://www.antlr.org. Nous vous conseillons
d’installer également un greffon ANTLR pour Eclipse, par exemple ANTLR 4 IDE disponible sur
le Marketplace.
Note : ANTLR 4 est un générateur d’analyseurs syntaxiques. Il convertit un fichier à l’extension
.g4, décrivant la grammaire, en sources Java qui implantent l’analyse syntaxique effective et
sont compilées comme partie du projet ILP. Les fichiers .g4 sont dans le répertoire ANTLRGra
mmars ; les fichiers Java générés sont dans target/generated-sources/antlr4. Le projet ILP
doit donc être configuré pour inclure le répertoire target/generated-sources dans la liste des
sources Java à compiler.
Attention : il ne faut jamais modifier un fichier Java généré ; seulement le fichier source .g4.
Le greffon ANTLR pour Eclipse se charge d’appeler ANTLR 4 pour générer automatiquement les
fichiers Java à chaque modification du fichier .g4 source, et il fournit une coloration syntaxique
pour les fichiers .g4.
Travail à réaliser :
téléchargez si nécessaire la dernière version de la distribution d’ANTLR 4 (antlr-4.5.3-co
mplete.jar au moment de la rédaction du sujet) depuis le site http://www.antlr.org/
download.html ;
ajoutez si nécessaire le JAR d’ANTLR 4 au projet ILP : clic droit sur le projet ILP-UPMC, puis
Properties > Java Build Path > Libraries > Add JARs ;
installez ANTLR 4 IDE par le Marketplace Eclipse : Help > Eclipse Marketplace. . . ;
vérifiez que le répertoire target/generated-sources est bien rempli de fichiers Java gé-
nérés par ANTLR ;
vérifiez que le répertoire target/generated-sources est configuré comme une source du
projet : clic droit sur le projet ILP-UPMC, puis Properties > Java Build Path > Source et
éventuellement Add Folder. . . si il est nécessaire de l’ajouter.
1.5 JUnit 4
Le projet ILP contient des tests unitaires utilisant la bibliothèque JUnit 4. Vous aurez par la
suite à enrichir ces tests unitaires.
Travail à réaliser : assurez-vous que la bibliothèque JUnit 4 est bien référencée par le projet :
clic droit sur le projet ILP-UPMC, puis Properties > Java Build Path > Libraries > Add Library. . .>
JUnit > JUnit 4.
1.6 Compilation des sources Java
Eclipse compile automatiquement les fichiers sources Java dès que le projet est créé, et à
chaque fois qu’un fichier source est ajouté ou modifié. Si tout se passe bien, aucune croix rouge
n’apparaît. Sinon, les messages d’erreur, qui apparaissent dans la fenêtre du bas, indiquent la
nature du problème. Les causes les plus fréquentes d’erreur de compilation sont :
une configuration incorrecte des bibliothèques utilisées (ANTLR ou JUnit, voir ci-dessus) ;
une génération absente ou incorrecte des fichiers d’analyse syntaxique par ANTLR (greffon
ANTLR4 IDE non installé ou mal configuré) ;
3
un Java Build Path incomplet (vérifiez les onglets Source et Libraries) ;
un choix incorrect de ComplianceLevel.
Travail à réaliser : vérifiez que la compilation s’est bien déroulée (pas de croix rouge, pas de
message d’erreur).
1.7 Compilation de la bibliothèque d’exécution C
Le compilateur ILP1 convertit un programme ILP en programme C, qui peut ensuite être com-
pilé par un compilateur C standard (par exemple gcc). Le programme généré dépend néanmoins
d’une bibliothèque d’exécution, programmée en C, qui fournit les types de données et fonctions
communs à tous les programmes ILP1. Cette bibliothèque d’exécution se trouve dans le sous-
répertoire Cdu projet Eclipse. Contrairement au code Java, la bibliothèque d’exécution C n’est
pas automatiquement (re)compilée par Eclipse. Nous allons donc la compiler à la main, une fois
pour toutes, en utilisant le Makefile associé. Cette bibliothèque devra être recompilée à la main
à chaque changement des sources C (ce que vous ferez d’ici quelques séances).
Travail à réaliser : compilez la bibliothèque d’exécution en tapant les commandes suivantes
dans un shell :
1cd ~/workspace/ILP-UMPC/C
2make
1.8 Test unitaire
Les tests unitaires JUnit 4 sont isolés dans des classes séparées, dans des packages dont
le nom se termine en .test. La classe com.paracamplus.ilp1.test.WholeTestSuite est un
méta-test, qui lance tous les tests unitaires des différents packages d’ILP1. Un test JUnit 4 se
lance avec un clic droit sur la classe de test, puis Run as > JUnit test (cette option n’apparaît que
quand Eclipse détecte que la classe possède des points d’entrée JUnit, de la même manière que
Run as > Java application n’est visible que si la classe possède une méthode main statique). Si
tout se passe bien, le test affiche une barre totalement verte.
Travail à réaliser : lancez les tests JUnit 4 intégrés à la classe WholeTestSuite et vérifiez leur
bonne exécution (barre totalement verte).
Un intérêt du test unitaire est de tester les régressions quand le code évolue. Vous serez donc
amené à réutiliser ce test dans les prochains TME, alors que vous modifierez le langage ILP1.
Pour gagner du temps, vous pourrez vous contenter de lancer un sous-ensemble des tests, en
particulier InterpreterTest (pour tester l’interprète), ou CompilerTest (pour tester le compi-
lateur).
1.9 Astuces pour le développement sous Eclipse
Si vous modifiez des fichiers en dehors d’Eclipse, la touche fonction F5 indique à Eclipse de
se resynchroniser avec le système de fichiers.
Lorsque le curseur est sur un nom, F3 permet d’ouvrir le fichier définissant ce nom.
F4 permet de voir la hiérarchie des classes ou des interfaces du nom concerné.
— CTRL–shift–O permet d’importer les classes ou interfaces qui manquent. Notez que des
classes de même nom peuvent exister dans des packages différents. Il faut donc faire at-
tention, en cas d’ambigüté, à importer la classe du bon package.
CTRL–espace propose des complétions.
Le survol avec la souris d’une zone erronée propose souvent de bonnes solutions (Quick
Fix).
4
Augmentez votre espace vital en déplaçant les vues, souvent inutiles, Outline,Tasks sous
la vue Package explorer. Pour cela faites glisser l’onglet depuis sa position actuelle à celle
souhaitée. Vous pouvez aussi les fermer. En cas de problème, vous pouvez restaurer la vue
d’origine dans le menu Window > Reset Perspective. . .
Vous pouvez voir plusieurs fichiers côte-à-côte en prenant l’onglet de l’un et en le faisant
glisser sur le bord horizontal (ou vertical) de la fenêtre. On peut même maintenant ouvrir
deux fenêtres sur le même fichier (menu contextuel, New Editor sur l’onglet contenant le
nom du fichier).
Il peut être aussi bien utile d’associer leur source et documentation aux archives JAR qui
vous sont proposées. Pour ce faire, menu Project > Properties > Java Build Path > Libraries,
choisir puis déplier la description d’un JAR, cliquer sur Source attachment, et choisir le
.zip contenant les sources.
1.10 Liens utile
Java 8 : http://java.sun.com/
ANTLR 4 : http://www.antlr.org
JUnit 4 : http://www.junit.org/
2 Premières expériences avec ILP
2.1 Exécution de programmes ILP1
Objectif : comprendre et réaliser toutes les étapes pour exécuter un programme ILP1.
Buts :
créer une application en ligne de commande pour lancer l’interprète sur un fichier donné ;
lancer l’interprète sur les programmes d’exemple et observer les résultats.
La distribution d’ILP1 contient une classe com.paracamplus.ilp1.interpreter.test.Inte
rpreterTest capable de lancer l’interprète sur une base de fichiers test. Cette classe a le format
d’un test unitaire JUnit 4, et est donc lancée par un clic droit puis Run as > JUnit test. Elle
va automatiquement tester tous les programmes contenus dans le répertoire SamplesILP1 avec
l’extension ilpml. Toutefois, la distribution n’inclue pas d’application pour lancer l’interprète
sur un programme spécifié en ligne de commande, ce qui serait pourtant bien utile ! Nous allons
réaliser une telle application ici, nommée FileInterpreter.
Attention. Toutes les extensions d’ILP, qu’elles soient vues en cours, réalisées en TME ou en
examen, doivent impérativement respecter deux règles :
1. il est interdit de modifier une classe Java fournie ; l’extension doit être intégralement conte-
nue dans de nouvelles classes ;
2. il est interdit d’ajouter une classe à un package existant dans les sources fournies ; toute
nouvelle classe doit être contenue dans un package dédié à l’extension ; nous utiliserons par
convention com.paracamplus.ilpX.ilpXtmeY, où Xindique la version du langage étendu
(ici 1, car nous étendons ILP1) et Yindique le numéro du TME (1également).
Suivant ces règles, nous demandons donc de :
1. créer un package, nommé com.paracamplus.ilp1.ilp1tme1 ;
2. créer dans ce package une classe FileInterpreter.
La classe doit être exécutable, c’est à dire définir une méthode :
public static void main (String[] args)
5
1 / 8 100%
La catégorie de ce document est-elle correcte?
Merci pour votre participation!

Faire une suggestion

Avez-vous trouvé des erreurs dans linterface ou les textes ? Ou savez-vous comment améliorer linterface utilisateur de StudyLib ? Nhésitez pas à envoyer vos suggestions. Cest très important pour nous !