CSC 4508 - Traduction: corrigé du TP noté 2007-2008

OpenLaszlo est un logiciel "open source" et gratuit, pour développer des "RIA", "Rich Internet Applications". Un fichier source (suffixe .lzx) contient un mélange de XML (pour la partie statique des composants d'interface), et de de JavaScript (pour les aspects dynamiques). Il est compilé : soit pour le FlashPlayer, soit en code DHTML/JavaScript.

Le but est de montrer combien/comment les techniques actuelles du web dépendent des techniques de compilation, et d'en acquérir les rudiments. L'exercice traite bien sûr d'un sous-ensemble, simplifié, de OpenLaszlo:

Précisement, il s'agit de vérifier la correction d'un fichier OpenLaszlo.

Consignes pour le rendu

Rendre sur la plate-forme Moodle, une archive tpnote.tgz contenant les fichiers:

1 - flex : analyse lexicale seule, balises simplifiées

Pour la forme générale des balises OpenLaszlo (en ignorant le cas des balises de commentaires) on a deux possibilités :

----------------- Exemple  1.lzx -------------- 
<canvas>
  <include />
  <view>
    <window />
    <view>
      <window>
	<view />
        <button />
      </window>
    </view>
  </view>
</canvas>
-----------------------------------------------

Q1 - Analyseur lex1.flex (2 points)

Mettre au point un analyseur lex1.flex reconnaissant les balises du fichier 1.lzx

------- Résultat après analyse de 1.lzx -------
[open canvas]
[include]
[open view]
[window]
[open view]
[open window]
[view]
[button]
[close window]
[close view]
[close view]
[close canvas]
-----------------------------------------------
Indications
Corrigé

2 - flex+bison : balises simplifiées, vérification d'appariement

Q2 - lex2.flex + gram2.bison (4 points)

Mettre au point un analyseur lex2.flex + gram2.bison

Ainsi avec 1.lzx on devrait obtenir :
	[<canvas>]
	  [<include />]<Include><LonelyTag><Item>
	  [<view>]
	    [<window />]<Window><LonelyTag><Item>
	    [<view>]
	      [<window>]
	        [<view />]<View><LonelyTag><Item>
	        [<button />]<Button><LonelyTag><Item>
	      [</window>]<Window><Block><Item>
	    [</view>]<View><Block><Item>
	  [</view>]<View><Block><Item>
	[</canvas>]<Canvas><Block><Item>
Indications
Corrigé

3 - Attributs des balises réelles

En réalité (dans les parties de balise notées "..." en Question 1) les balises ouvrantes ou isolées peuvent contenir des triplets : NomAttribut="valeur". Dans la question 4, nous donnons un exemple complet (4.lxz). Dans cette partie nous ne traiterons que les aspects liés aux attributs.

Q3.a) Étape 1 : analyse lexicale (3 points)

Construire l'analyseur lex3a.flex reconnaissant les seuls composants de triplets, provisoirement en dehors de toute balise.

Exemple d'entrée à traiter :

--------------- 3.dat ------------------------------------------
width="100%" height="100%" bgcolor="0xCCCCCC"
href="resources.lzx"  name="main" title="Details" resizable="true"
text="Check" x="50" y="50"
------------------------------------------------------------------

Indications Pour l'exemple 3.dat, l'analyseur devrait produire :
[WIDTH] [=] [PERCENT_V] [HEIGHT] [=] [PERCENT_V] [BGCOLOR] [=] [COLOR_V]
[HREF] [=] [STRING_V] [NAME] [=] [STRING_V] [=] [RESIZABLE] [=] [STRING_V]
[TEXT] [=] [STRING_V] [X] [=] [INT_V] [Y] [=] [INT_V]
[*] Précisions pour le cas des chaînes
Corrigé

Q3.b) Étape 2: lex3b.flex + gram3b.bison (4 points)

Mettre au point un analyseur lex3b.flex + gram3b.bison qui traite une liste d'atributs sous forme de triplets attribut/=/valeur. À chaque reconnaissance de triplet, l'analyseur syntaxique doit afficher: nom = type de la valeur, par exemple X = INT_V.

Indications
------- Résultat après analyse de 3.dat -------
[width][=][PERCENT_V]<WIDTH = PERCENT_V>[height][=][PERCENT_V]<HEIGHT = PERCENT_V>[bgcolor][=][COLOR_V]<BGCOLOR = COLOR_V>
[href][=][STRING_V]<HREF = STRING_V>[name][=][STRING_V]<NAME = STRING_V>[title][=][STRING_V]<TITLE = STRING_V>[resizable][=][STRING_V]<RESIZABLE = STRING_V>
[text][=][STRING_V]<TEXT = STRING_V>[x][=][INT_V]<X = INT_V>[y][=][INT_V]<Y = INT_V>
-----------------------------------------------
Corrigé

Q3.c) Étape 3: lex3c.flex + gram3c.bison avec passage de valeurs (3 points)

Développer l'analyseur lex3c.flex et gram3c.bison reprenant l'analyseur de la question précédente en remplaçant les types de valeur (INT_V, STRING_V...) par leur valeur.

Indications
------- Résultat après analyse de 3.dat -------
[width][=][PERCENT_V]<WIDTH = "100%">[height][=][PERCENT_V]<HEIGHT = "100%">[bgcolor][=][COLOR_V]<BGCOLOR = "0xCCCCCC">
[href][=][STRING_V]<HREF = "resources.lzx">[name][=][STRING_V]<NAME = "main">[title][=][STRING_V]<TITLE = "Details">[resizable][=][STRING_V]<RESIZABLE = "true">
[text][=][STRING_V]<TEXT = "Check">[x][=][INT_V]<X = "50">[y][=][INT_V]<Y = "50">
-----------------------------------------------

Corrigé

Remarque: si vous ne pouvez pas répondre à cette question, vous pouvez quand même faire la question 4.

4 - flex+bison : reconnaissance balises et attributs

Q4.a) Étape 1: analyse lexicale seule (4 points)

En utilisant les analyseurs lex1.flex et lex3a.flex construits aux questions précédentes, construire l'analyseur lex4a.flex reconnaissant en plus des balises les composantes des triplets attribut/=/valeur.

------------- Exemple :  4.lzx ------------------------------------------------ 
<canvas width="100%" height="100%" bgcolor="0xCCCCCC" >
  <include href="resources.lzx" />
  <view name="main" width="100%" height="100%">
    <window name="details" title="Details"
	    width="50%" height="50%" resizable="true" />
    <view>
      <button text="Check" width="50%" height="50%" x="50" y="50" />
    </view>
  </view>
</canvas>
-------------------------------------------------------------------------------
Indications
-------- Résultat après analyse de 4.lzx -------------------------
[<canvas][width][=][PERCENT_V][height][=][PERCENT_V][bgcolor][=][COLOR_V][>]
[<include][href][=][STRING_V][/>]
[<view][name][=][STRING_V][width][=][PERCENT_V][height][=][PERCENT_V][>]
[<window][name][=][STRING_V][title][=][STRING_V]
[width][=][PERCENT_V][height][=][PERCENT_V][resizable][=][STRING_V][/>]
[<view][>]
[<button][text][=][STRING_V][width][=][PERCENT_V][height][=][PERCENT_V][x][=][INT_V][y][=][INT_V][/>]
[</view>]
[</view>]
[</canvas>]
------------------------------------------------------------------

Corrigé

Q4.b) Étape 2 : analyse syntaxique limitée (BONUS)

Mettre au point lex4b.flex, gram4b.bison pour articuler les analyseurs lexical + syntaxique avec une analyse syntaxique limitée : simple récupération des catégories lexicales.

Indications

Q4.c) Étape 3 : analyse syntaxique complète (BONUS)

Mettre au point lex4c.flex, gram4c.bison pour vérifier complètement la syntaxe de l'exemple 4.lzx.

Indications
CSC 4508, TELECOM SudParis, INF, F. MEUNIER, F. SILBER-CHAUSSUMIER
Last modified: Fri Apr 3 11:13:32 CEST 2009