G´en´eration de planning HTML
Licence info S5
TP COMPIL – 2013 - 2014
Le but de ce TP est de vous faire d´evelopper une petite application de traitement de donn´ees textuelles,
sans utiliser les techniques bien utiles qui seront vues en cours, pour bien vous faire prendre la mesure
de la difficult´e de la tˆache quand on ne maˆıtrise pas ces techniques. En pratique :
ce sujet de TP s’´etale sur 2 s´eances ;
vous devez rendre votre travail sur PROF `a la fin de chaque s´eance, mˆeme s’il n’est pas
termin´e mais accompagn´e d’un README indiquant son ´etat d’avancement ;
c’est un TP de mise en jambe, sciemment difficile puisqu’on ne connaˆıt pas encore les techniques
adapt´ees, donc pas de panique : si vous avez du mal, c’est normal !
`
A l’issue de ce TP, vous devriez :
2avoir compris le DSL des plannings ;
2ˆetre `a l’aise en Java ;
2maˆıtriser la biblioth`eque de lecture / ´ecriture qui vous est fournie ;
2savoir utiliser les expressions r´eguli`eres de Java (classes Pattern et Matcher) ;
2savoir ´ecrire des scripts shell simples ;
2savoir rendre `a temps votre travail sur PROF ;
2attendre impatiemment la suite du cours.
1 Le DSL
Pour se simplifier la vie, et comme on ne sait pas encore utiliser une analyse dirig´ee par la syntaxe 1,
on a fait le choix pour ce TP d’une analyse dirig´ee par les d´elimiteurs 2, en l’occurrence les sauts de ligne.
On impose donc dans la syntaxe du DSL que les informations soient organis´ees ligne par ligne (et le
fichier d’entr´ee sera en cons´equence lu ligne par ligne, et non caract`ere par caract`ere). On pourra utiliser
le saut de ligne et les blancs `a volont´e, pour la mise en forme.
Pour ce TP, c’est d´ej`a bien si vous r´ealisez la version simple du DSL, et ce n’est pas grave
si certains d´etails restent `a traiter (par exemple si vous ne v´erifiez pas les pr´esence des guillemets,
la syntaxe des heures, etc).
2 R´ealisation
T´el´echarger l’archive sur le portail. Elle contient un paquetage planningMaster `a compl´eter. G´en´erer
la javadoc peut ˆetre utile (sh genererJavadoc.sh).
2.1 Les fichiers fournis
La classe GenerationHTMLPlanningMaster est `a compl´eter. La m´ethode generation est charg´ee
de :
lever une exception ErreurFormatException si le planning d’entr´ee n’est pas correct ;
s’il est correct, ´ecrire le fichier HTML correspondant.
Les utilitaires d’entr´ee/sortie sont fournis et param`etrent la classe GenerationHTMLPlanningMaster
(pas la peine d’´editer ces fichiers, regarder la javadoc suffit) :
LectureLigne.java,LectureLigneFlot.java : pour lire un fichier ligne par ligne ;
EcritureTexte.java,EcritureTexteFlot.java : pour ´ecrire des chaˆınes dans un fichier.
La classe LancerGeneration permet de lancer l’application en passant un fichier de donn´ees fichier.dsl
sur la ligne de commande. Elle cr´ee un objet de type GenerationHTMLPlanningMaster (param´etr´e par
le flot d’entr´ee) et lance dessus la m´ethode generation.
Une fois que le nom du fichier de sortie sera calcul´e (rappel : nomMaster date salle.html ), il faudra
le transmettre `a l’objet de type GenerationHTMLPlanningMaster (dans l’exemple qui suit this est de
type GenerationHTMLPlanningMaster) pour rendre les ´ecritures possibles :
1. Analyse dirig´ee par la syntaxe = bas´ee sur une grammaire alg´ebrique
2. Delimiter-directed translation, [Fowler2011] p201.
TP COMPIL 2013 - 2014
TP COMPIL G´en´eration de planning HTML
EcritureTexte sortie = new EcritureTexteFlot(new FileOutputStream(<nomFichier>);
this.setOutput(sortie);
...
this.ecrire(...);
Le fichier ConstantesHTML.java contient le texte correspondant `a certaines balises HTML qui ap-
paraˆıtront dans le fichier g´en´er´e. Ce fichier est `a compl´eter.
Il est conseill´e de stocker les fichiers de test dans un r´epertoire test.
Il est fortement recommand´e d’automatiser votre travail en vous bricolant des scripts pour lancer des
lignes de commande depuis le r´epertoire courant (voir les rappels utiles sur le portail), par exemple :
pour compiler les sources ;
pour lancer le main de la classe LancerGeneration ;
pour supprimer automatiquement les html g´en´er´es ;
cr´eer une archive `a rendre sur PROF.
2.2 M´ethode `a appliquer
Le scema g´en´eral consiste `a :
lire la prochaine ligne
la reconnaˆıtre pour v´erifier qu’elle correspond `a la syntaxe attendue, ou pour faire un choix entre
plusieurs syntaxes possibles
l’analyser pour en extraire l’information utile
Pour savoir quel formalisme utiliser pour la reconnaissance, on peut commencer par se demander si les
langages contenant les lignes d´eclarant le master, la date, une ligne de soutenance, etc, sont des langages
r´eguliers (avec r´eponse argument´ee, pas au pif !).
Si tel est le cas, alors chaque ligne peut ˆetre reconnue par une expression r´eguli`ere et on peut utiliser
les expressions r´eguli`eres de Java 3.
2.3 Les expressions r´eguli`eres de Java
Vous trouverez ici un tutorial tr`es complet (le chercher en local au M5)
http://download.oracle.com/javase/tutorial/essential/regex/
et dans ce sujet de quoi commencer. On se sert des classes Pattern et Matcher du paquetage java.util.regex
(la classe String peut aussi se r´ev´eler utile).
La classe Pattern permet de d´efinir une expression r´eguli`ere sous la forme d’une String. Par exemple,
"master" correspond `a l’expr reg master. De nombreuses classes de caract`eres sont pr´ed´efinies, voir
http://download.oracle.com/javase/tutorial/essential/regex/pre_char_classes.html
Par exemple, \w esigne n’importe quel caract`ere dans [a-zA-Z_0-9] et \s esigne un blanc au sens
large (incluant les tabulations, retour `a la ligne, etc). L’expression r´eguli`ere .d´enote n’importe quel
caract`ere. L’expression [^;] d´esigne n’importe quel caract`ere sauf ;. Les expressions \s+ et \s* utilisent
les op´erateurs +et *avec leur signification habituelle. Comme en Java le caract`ere \est un caract`ere
sp´ecial, il faut le d´esp´ecialiser `a l’int´erieur des String, et on devra donc ´ecrire "\\s*" pour exprimer
autant de blancs que je veux , ce qui rend les expressions rapidement illisibles.
Si on veut juste savoir si une chaˆıne correspond `a une expression r´eguli`ere, on peut utiliser la m´ethode
statique matches :Pattern.matches("master",ligneLue) retourne vrai si la chaˆıne d’entr´ee ligneLue
(de type String) correspond `a l’expression r´eguli`ere "master".
Pour extraire des sous-motifs de la chaˆıne d’entr´ee, il faut passer par la classe Matcher.
Pattern pattern = Pattern.compile("\\s*dring\\s+((\\w|\\s)+)\\s*");
Matcher matcher = pattern.matcher(ligneLue);
if (matcher.matches())
System.out.println(matcher.group(1));
d´efinit l’expression r´eguli`ere reconnaissant le mot dring, suivi d’une suite de caract`eres de [a-zA-Z_0-9],
avec ´eventuellement des blancs qui trainent. L’objet matcher est construit sur cette expression. Sa
3. Plus g´en´eralement, le langage contenant l’ensemble des plannings est r´egulier. Mais ce n’est pas pratique d’utiliser
une grosse expression r´eguli`ere pour extraire les informations du texte source.
2013 - 2014 2 Licence info S5
TP COMPIL G´en´eration de planning HTML
m´ethode matches retourne vrai si la chaˆıne d’entr´ee correspond `a l’expression. L’appel de matches per-
met d’appeler la m´ethode group. Un groupe est une expression r´eguli`ere entre parenth`eses, la totalit´e de
l’expression ´etant par convention le groupe 0. Les groupes sont num´erot´es par l’ordre d’apparition dans la
chaˆıne de leur parenth`ese ouvrante. Dans notre exemple, le groupe qui nous int´eresse est ((\\w|\\s)+),
c’est le groupe num´ero 1. Si ligneLue vaut " dring il est 6h ", alors le code affichera il est 6h.
`
A vous de chercher :
comment reconnaˆıtre une d´eclaration de master, de date, etc
comment r´ecup´erer facilement l’information entre les ;
— etc
2.4 Travail `a rendre
Tous les fichiers sur lesquels vous ˆetes intervenus doivent porter les noms et pr´enoms des
binˆomes (README,GenerationLatexPlanningMaster.java,ConstantesHTML.java).
`
A l’issue de chacune des 2 s´eances de TP, vous devez rendre sur PROF une archive de votre r´epertoire
de travail, travail qui aura ´et´e abondamment test´e `a la fois dans les cas corrects (g´en´eration d’un fichier
HTML) et incorrect (lev´ee d’exception). Votre TP doit compiler et s’ex´ecuter. Pour y arriver, vous
pouvez rendre sur PROF la derni`ere version courante qui fonctionne (mˆeme incompl`ete) tout au long de
la s´eance.
Vous rendrez aussi un README indiquant l’´etat d’avancement de votre travail (un travail
bien mais pas compl`etement fait est mieux not´e qu’un travail tout mais mal fait) et epondant aux
questions suivantes en justifiant de mani`ere concise vos r´eponses. Ces questions vous aideront `a
prendre du recul par rapport `a votre travail (il n’y a pas de r´eponses toutes faites ni de pi`eges, r´epondez
juste aux questions en r´efl´echissant `a votre implantation).
Q 1 : En ce qui concerne l’approche lire ligne par ligne et se d´ebrouiller avec les expressions r´eguli`eres
Java utilis´ee dans ce TP. `
A votre avis :
1. est-il facile de modifier l’un des mots cl´es ? (ex : remplacer ”master” par ”diplome”)
2. est-il facile de modifier la syntaxe des plannings ? (ex : autoriser les d´eclarations de master, salle
et date dans n’importe quel ordre) ?
3. est-il facile de modifier l’application pour g´en´erer un autre format que du HTML ?
4. en lisant votre code, est-il facile de rep´erer le lexique et la syntaxe du DSL ?
5. en cas d’erreur de lexique ou de syntaxe, le message produit par votre application permet-il de
retrouver facilement l’erreur ?
6. si la r´eponse aux questions pr´ec´edentes est parfois non : pensez-vous que c’est l’approche qui est
en cause, ou votre code qui n’est pas clair ?
2
2013 - 2014 3 Licence info S5
1 / 3 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 !