Projet Coloration lexicale et indentation de code Java 1

Universit´e Paris Diderot Programmation Orient´ee Objet
L3 Ann´ee 2011-2012
Projet
Coloration lexicale et indentation de code Java
Le but de ce projet est de d´evelopper un programme qui prend en entr´ee un
programme Java et soit affiche dans le terminal le programme correctement indent´e
avec les mots-clefs, les noms des packages, les types et les d´eclarations de variables
color´es, soit cr´ee une page html contenant le programme color´e et correctement
indent´e.
1 Repr´esentation du programme
Le but de ce projet n’´etant pas de r´ealiser un parser de programme Java, un
parser vous est fourni qui cr´ee dans un objet Java la repr´esentation d’un pro-
gramme. Les objets servant `a repr´esenter un programme vous sont donn´es dans le
package ASA (pour Arbre de Syntaxe Abstraite). Vous devez regarder les diff´erentes
classes de ce package ainsi que leur commentaires afin de comprendre ce qu’elles
repr´esentent.
Un code java situ´e dans un fichier sera stock´e dans un objet de la classe
Programme et les diff´erents champs de cet objet vous permettront d’acc´eder aux
´el´ements du programme. Afin de faciliter votre compr´ehension, nous vous fournis-
sons un exemple cr´eant une repr´esentation Java d’un programme.
Exemple Voil`a un exemple de code :
1import java.util.*;
import java . io .*;
/*Classe Livre*/
public class Livre extends Document
7implements Consultable{
9private S tr in g titre ;
private int numero ;
11 public int [] k;
private static int nombre =0;
/*Constructeur*/
15 public Livre ( String _titre ){
1
titre = _ ti tr e ;
17 numero = nombre ;
nombre = nombre +1;
19 }
21 public Livre ( S tr in g _titre , int _ nu me ro ){
int [][] t= new int [3][2];
23 titre = _ ti tr e ;
if ( _numero < nombre ){
25 System . out . p ri nt ln ( " Pb " );
numero=nombre;
27 nombre = nombre +1;
}
29 else{
numero=_numero;
31 nombre = numero +1;
}
33 }
35 public String getTitre (){
return t itre ;
37 }
}
Le programme qui suit cr´ee l’objet instance de la classe Programme encodant
le programme situ´e dans le fichier Livre.java.
import ASA .*;
2import java.util.*;
4public class Test{
6public static void main ( String [] argv ){
List < String > imports = new LinkedList < String >();
8imports . add ( " java . util .* " );
imports . ad d (" j ava . io .* " );
List <Commentaire > comm=
12 new LinkedList<Commentaire >();
Commentaire c1=
14 new C omm entai re(" Classe Livre ");
comm . add ( c1 );
2
/* mots clefs de la classe */
18 List < String > mo ts c le fs cl=
new LinkedList < String > () ;
20 mo tsc lef scl. add (" public " );
22 /*Interfaces quimplementent la classe*/
List < String > i nt erf ace s=
24 new LinkedList < String > ();
interfaces.add("Consultable");
/* corps contient la de scrip tio n des
28 champs et des methodes de la classe
et les co mment air es situes dans le corps
30 de la classe
*/
32 List <CorpsClasse > corps=
new LinkedList<CorpsClasse >();
/* Champ titre */
36 List < String > m ot scl efs= new L inkedList < Strin g >();
m ot sc lef s. add ( " private " );
38 Type ty = new T yp e( " String " ,0);
DeclarationChamp dc_titre=
40 new DeclarationChamp(motsclefs,
ty ,
42 " t it re " ,
null );
44 corps . add ( dc_titre );
46 /* Champ numero */
mo ts clef s= new LinkedList < String >();
48 mo tsc lef s. add ( " private " );
ty = new T yp e (" int " ,0);
50 DeclarationChamp dc_numero=
new DeclarationChamp(motsclefs,ty,
52 " n um er o " , nu ll );
corps . add ( d c_ nu me ro);
/* C hamp k */
56 mot scle fs= new LinkedList < String >();
m ot sc lef s. add ( " public " );
58 ty = new T ype ( " int " ,1);
DeclarationChamp dc_k=
3
60 new D ec la r at io nCh amp ( motsclefs , ty , " k" , nu ll );
corps . add ( dc_k );
/* Champ nombre */
64 mot scle fs= new LinkedList < String >();
m ot sc lef s. add ( " private " );
66 mo tsc lef s. add ( " static " );
ty = new T yp e (" int " ,0);
68 Exp ress ion valeur = new E xp res si on(" =0 " );
DeclarationChamp dc_nombre=
70 new DeclarationChamp(motsclefs,ty,
" n om br e " , valeur );
72 corps . add ( d c_n omb re);
74 /*Commentaire*/
Commentaire c2=new Commentaire("Constructeur");
76 corps . add ( c2 );
78 /* Premier con str ucteu r*/
mo ts clef s= new LinkedList < String >();
80 mo tsc lef s. add ( " public " );
List < Argument > args = new LinkedList < Argument >();
82 ty = new T ype ( " String " ,0);
Argument arg = new Argument ( ty ," _titre " );
84 args . add ( arg );
List <Instruction > instrs=
86 new LinkedList<Instruction >();
E xp re ssi on e xp = new Ex pr e ss io n( " titre = _titre " );
88 instrs . add ( exp );
exp = new E xpre ssio n( " numero = nombre " );
90 instrs . add ( exp );
exp = new E xpr ess ion( " nombre = nombre +1 " );
92 instrs . add ( exp );
DeclarationMethode dm_document1=
94 new DeclarationMethode(motsclefs,
null ,
96 "Document",
args ,
98 instrs);
corps . add ( d m_ do cu men t1 );
/* Deuxieme c onstr uct eu r*/
102 mot sc lefs= new LinkedList < String >();
4
m ot sc lef s. add ( " public " );
104 args=new LinkedList<Argument>();
ty = new T yp e (" S tr ing " ,0);
106 arg = new A rg ument (ty , " _titre " );
args . add ( arg );
108 ty = new Type ( " int " ,0);
arg = new Argument ( ty , " _ nu me ro " );
110 instrs=new LinkedList <Instruction >();
ty = new T yp e (" int " ,2);
112 exp = new Ex press ion( " new int [3][2] ");
DeclarationVariable dc_t=
114 new DeclarationVariable(ty,"t",exp);
instrs . add ( dc_t );
116 exp = new Ex pre ssi on(" t it re = _titre " );
instrs . add ( exp );
118 List <Instruction > liThen=
new LinkedList<Instruction >();
120 Expression condition=
new E xpre ssio n( " _numero < nombre " );
122 exp = new Ex pres sion( " System . out . println (\" Pb \") ");
liThen . add ( exp );
124 exp = new Ex pres sion( " numero = nombre " );
liThen . add ( exp );
126 exp = new Ex pre ssi on(" n om bre = n ombre +1 " );
liThen . add ( exp );
128 BlocInstructions blocThen=
new BlocInstructions(liThen);
130 List <Instruction > liElse=
new LinkedList<Instruction >();
132 exp = new Ex pr essio n(" numero = _numero " );
liElse . add ( exp );
134 exp = new Ex pre ssi on(" n om bre = n umero +1 " );
liElse . add ( exp );
136 BlocInstructions blocElse=
new BlocInstructions(liElse);
138 IfInstruction ifinst=
new I fInst ruc ti on( condition ,
140 blocThen,
blocElse);
142 instrs . add ( ifinst );
DeclarationMethode dm_document2=
144 new DeclarationMethode(motsclefs,
null ,
5
1 / 11 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 !