CSC 4508 - Traduction: corrigé du TP noté 2011-2012

Recherche dans un document HTML

La recherche et l'accès aux documents comportent de nombreux aspects : repérage de mots-clés et de leurs variantes, repérage de paragraphes, constitution de tables exploitables en recherche... etc. L'exercice en donne un aperçu, en se limitant à une analyse structurelle minimale, l'extraction de descriptions de "paragraphes" (selon un format de document particulier), la génération de code HTML permettant ensuite de visualiser les paragraphes par surbrillance HTML + Javascript.

Objectif de l'exercice

L'objectif de cet exercice est est l'analyse de fichier HTML pour générer du code permettant des surbrillances ; en bonus il est aussi possible de vérifier la structure HTML. L'exemple concerne des conseils d'utilisation Windows (d'après «SOS PC», éditions Le Titan). Dans cet exercice, nous vous proposons deux extraits concernant la manipulation de la barre des tâches:

1 - Analyseur lexical seul (7 points)

Mettre au point un analyseur lexical lex1.flex reconnaissant les deux fichiers en définissant les macros suivantes :
  1. les balises HTML simples (OP pour open et CL pour close) :
  2. les espaces et le texte :
  3. des balises plus élaborées :
  4. les «autres» balises, c'est-à-dire les balises non traitées jusqu'ici
  5. les balises ancres:
  6. les balises «division»:
Indications
Corrigé

2 - Mise au point d'une grammaire minimale avec passage de valeurs et traitement d'erreur (7 points)

Mettre au point un analyseur lex2.flex, gram2.bison 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 - Génération d'un menu déroulant

Le nombre de conseils contenus dans le fichier HTML peut être très grand. Le but de cette partie est de générer un menu déroulant permettant de surligner en couleur le sujet sélectionné. La structure proposée est composée de trois fichiers: L'objectif de cette partie est de générer le contenu de la balise select dans le fichier control.htm.

3.1 - Reconnaissance des ancres et des divisions colorées (4 points)

Afin de générer le menu déroulant, il faut reconnaître les noms des ancres nommées et les insérer dans le menu déroulant. Dans cette partie, on se focalisera sur le traitement des ancres nommées, seules, ou contenues dans des divisions colorées pour récupérer les noms d'ancres.

Créez l'analyseur lex3.flex, gram3.bison reconnaissant les règles suivantes:

Indications

Au niveau lexical

Au niveau syntaxique
Corrigé La plupart d'entre vous sont partis sur une solution plus simple et probablement meilleure, consistant à reconnaître au niveau lexical AN_OP et à ne transmettre au niveau syntaxique que la valeur de l'attribut name, en faisant côté lexical une fonction récupérant directement la valeur de cet attribut. La grammaire est alors beaucoup plus simple puisqu'il n'y a pas à décrire la syntaxe des attributs.

3.2 - Enregistrement des ancres nommées (2 points)

Complétez l'analyseur précédent pour générer à partir des noms des ancres nommées le menu déroulant. Supposons que le fichier initial contienne les ancres nommées suivantes:
      <a name="nom1">Titre 1</a>
      <a name="nom2">Titre 2</a>
      <a name="nom3">Titre 3</a>
      <a name="nom4">Titre 4</a>
Le résultat de l'analyseur devra être :
      <option value="-1">nom1</option>
      <option value="-1">nom2</option>
      <option value="-1">nom3</option>
      <option value="-1">nom4</option>
Pour l'instant toutes les valeurs de l'attribut value seront égales à -1.
Corrigé

3.3 - Récupération des divisions colorées (bonus)

Complétez l'analyseur précédent pour récupérer à partir des valeurs des divisions colorées, la valeur du menu déroulant. Si une ancre nommée fait partie d'une ColoredDiv, enregistrez l'ancre avec la valeur d'attribut id de la division. Supposons que le fichier initial contienne les ancres nommées suivantes:
<div class="Orange0" id="1">
...
      <a name="nom1">Titre 1</a>
...
</div>
<div class="Yellow0" id="2">
...
      <a name="nom2">Titre 2</a>
...
</div>
<div class="Yellow0" id="3">
...
      <a name="nom3">Titre 3</a>
...
</div>
<div class="Lime0" id="4">
...
      <a name="nom4">Titre 4</a>
...
</div>
Le résultat de l'analyseur devra être :
      <option value="1">nom1</option>
      <option value="2">nom2</option>
      <option value="3">nom3</option>
      <option value="4">nom4</option>
Corrigé

3.4 - Test du résultat obtenu (bonus)

Testez votre analyseur sur doc1-Full.htm. Créez le fichier controlFull.htm obtenir à partir du fichier control.htm apèrs insertion du résultat de votre analyseur dans le corps de la balise select. Créez le fichier indexFull.htm obtenu à partir du fichier index.htm en modifiant les noms des fichiers ouverts dans chacune des frames. Ouvrez ce dernier fichier dans votre navigateur et testez.
Corrigé

CSC 4508, Télécom SudParis, INF, F. MEUNIER, F. SILBER-CHAUSSUMIER
Last modified: Fri May 18 17:24:47 CEST 2012