L'exercice concerne Google Web Toolkit, GWT.
Avec la prolifération des langages informatiques, en particulier pour le web, de nombreux transcodages d'un langage vers un autre apparaissent. Par exemple, si on utilise Google Web Toolkit, on développe l'application web entièrement en Java, puis le logiciel GWT traduit en JavaScript + HTML («technologie Ajax»).
Dans cet exercice, nous nous limitons à une traduction de Java vers HTML, pour un code générant une table :JTable
: defTableJava.txt
(visualisation : compiler/exécuter MyJFrame.java qui contient ce code);body
d'un fichier HTML).JTable
Java, sans contrepartie en HTML ; il faudrait
du JavaScript
).
Mettre au point un analyseur lex1.flex
reconnaissant toutes
les unités lexicales de defTableJava.txt.
. = ( ) " , ;
Vector
, new
et JTable
ainsi que la méthode addElement
.
defTableJava.txt
, il faudra par exemple reconnaître : titres
, ligne1
, ...
, personnes
, Loulou
. Pour chaque chaîne reconnue, affichez dans un premier temps: STRING
.
Mettre au point un analyseur lex2.flex, gram2.bison,
prin.c
définissant les catégories lexicales suivantes:
VECTOR
, NEW
, JTABLE
et ADDELEMENT
;STRING
.
Text
(texte acceptable en entree) permettant
de reconnaître une suite de LexUnit
,LexUnit
permettant de reconnaître chacune des catégories lexicales définies ci-dessus\n
et
espace
\n
et
espace
, aucune impression ne sera faite au niveau lexicalyytext
à l'analyseur syntaxique sans conversion
(c'est-à-dire yylval
de type char *
).defTableJavaAvecErreur.txt
lex3.flex
, gram3.bison
et prin.c
permettant de reconnaître la structure de defTableJava.txt
. Créer les règles suivantes:
QuotedString
pour reconnaître une STRING
encadrée de double-quotes;VectorDef
pour reconnaître la définition d'un vecteur:
Vector titres = new Vector( );
VectorValue
pour reconnaître l'ajout d'un élément à un vecteur. Attention, cet ajout peut prendre deux formes différentes. Il faut prévoir l'ajout d'un élément de type chaîne de caractères:
ligne3.addElement("Evry");ou l'ajout d'un élément de type vecteur:
lignes.addElement(ligne1);
JTable
pour reconnaître la définition d'une table, par exemple:
JTable personnes = new JTable( lignes, titres );
Statement
correspondant soit à VectorDef
, soit à TableDef
;Text
correspond à une liste de Statement
.lex3.flex
est identique à lex2.flex
defTableHtml.txt
à partir de defTableJava.txt
. Il faut alors ajouter à l'analyseur syntaxique les actions suivantes:
VectorDef
, créer un vecteur identifié par son nom;VectorValue
, ajouter au vecteur identifié par son nom la valeur donnée en paramètre. Prévoir les deux cas: paramètre de type chaînes de caractères et paramètre de type vecteur;JTable
, générer le HTML correspondant aux vecteurs donnés à la définition.utils.c
et utils.h
contenant les structures de données nécessaires et les fonctions:
void createVector(char *vectorName);
void addVectorStringValue(char *vectorName, char *stringValue);
void addVectorVectorValue(char *vectorName, char *vectorNameValue);
void createTable(char *tableName, char *vectorNameRow, char *vectorNameTitle);
lex4.flex
, gram4.bison
, utils.c
et utils.h
permettant de transformer les extraits de GWT suivants en HTML:
defTableJava.txt
defTableJava2.txt
: cas correct où l'utilisateur définit d'abord tous les vecteurs puis les utilisedefTableJavaAvecErreur2.txt
: cas incorrect où l'utilisateur crée la table avant d'avoir rempli les vecteurs lignes
et titres
defTableJavaAvecErreur3.txt
: cas incorrect où l'utilisateur utilise le vecteur titres
avant de l'avoir défini