CSC 4508 - Traduction: TP noté 2010-2011

De GWT à JavaScript + HTML: affichage d'une arborescence

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.

Objectif de l'exercice

Dans cet exercice, nous nous limitons à une traduction de Java vers HTML, pour un code affichant une arborescence :

Démonstration

Afficher une arborescence avec Java Afficher une arborescence avec Javascript + HTML Dans les 2 cas, vérifiez que les arbres affichés sont expansibles / rétractables par clics.

1 - Analyseur lexical seul (2 points)

Mettre au point un analyseur lex1.flex reconnaissant toutes les unités lexicales utiles de jTreeSrc.txt.

  1. reconnaître les caractères isolés suivants :
    . =  ( ) " , ; 
    
  2. reconnaître chaque mot-clé du langage Java apparaissant dans jTreeSrc.txt ainsi que DefaultMutableTreeNode, JTree00 et addObject,
  3. reconnaître les symboles de programmation. Pour chaque chaîne reconnue, affichez dans un premier temps: SYMBOL.
  4. reconnaître les chaînes de caractères correspondants aux valeurs choisies par le programmeur. Dans jTreeSrc.txt, il faudra par exemple reconnaître : P1, P2...
    Pour chaque chaîne reconnue, affichez dans un premier temps: STRINGVALUE.
Indications
Corrigé

2 - Mise au point d'une grammaire minimale avec passage de valeurs (3 points)

Mettre au point un analyseur lex2.flex, gram2.bison, prin.c définissant les catégories lexicales correspondant à celles reconnues dans la question précédente.

La grammaire doit contenir deux règles :

Indications
Corrigé

3 - Reconnaissance de la structure syntaxique (3 points)

Créez l'analyseur lex3.flex, gram3.bison et prin.c permettant de reconnaître la structure de jTreeSrc.txt. Créer les règles suivantes: telles qu'il n'y ait aucun conflit de type réduction/réduction ou de type décalage/réduction entre les règles.

Indications

Corrigé

4 - Table de symboles (5 points)

En utilisant le module symbolMgt préparé (voir la préparation), créez l'analyseur lex4.flex, gram4.bison enregistrant dans une table de symboles les différentes variables du programme :

Une fois le fichier lu, l'analyseur doit afficher la table des symboles.

On suppose ici le texte source jTreeSrc.txt sans erreur sur les symboles. Signalez des erreurs non directement syntaxiques : On prendra comme exemple le fichier jTreeSrc.bad.txt.
Corrigé

5 - Génération de code (4 points)

En utilisant le module treeMgt préparé (voir la préparation), créez l'analyseur lex5.flex, gram5.bison générant le fichier jsTreeObject.txt à partir du fichier jTreeSrc.txt.

Pour cela, utilisez les informations stockées dans la table de symboles. Dans un 1er temps on ne demande pas de réaliser une indentation.

Bonus ( + 1 point )

Modifier la fonction pour réaliser l'indentation comme dans l'exemple.
Corrigé

6 - Un perfectionnement à la grammaire (3 points)

Vous pouvez repartir de la question 3.

L'extrait jTreeSrc.txt était en fait une simplification de jTreeSrcBis.txt, extrait d'un programme réel.

Supprimez tous les conflits.
Corrigé

CSC 4508, Télécom SudParis, INF, F. MEUNIER, F. SILBER-CHAUSSUMIER, M. SIMATIC
Last modified: Wed Apr 18 12:35:09 CEST 2012