NF11 – TD13 Grammaire AntLR – Génération de code - UTC
Transcription
NF11 – TD13 Grammaire AntLR – Génération de code - UTC
NF11 – TD13 Grammaire AntLR – Génération de code Un fichier définissant des tags par langage a la forme suivante (colonne de gauche) et une grammaire AntLR décrivant les fichiers est indiquée colonne de droite (STRING désigne une chaîne ne contenant pas d'espace) : Fichier language = fr tag = ville tag = pays tag = événement language = en tag = city tag = country Grammaire file : langgroup+ ; langgroup : language ('tag' '=' STRING)+ ; language : 'language' '=' STRING ; Question 1 : 1. Représenter l’arbre de dérivation pour le fichier précédent. 2. On veut générer un fichier compte-rendu où les tags sont regroupés par langage. Liste des Tags par langage : fr { ville, pays, événement } en { city, country } a) Analyser la structure du fichier compte-rendu. b) Ecrire les templates permettant de rendre l’affichage précédent. Quels sont les types des paramètres ? Quelle structure de données est suffisante dans le visiteur d'arbre ? 3. Ecrire les deux méthodes du visiteur d’arbre visitLanggroup(LanggroupContext ctx) et visitLanguage(LanguageContext ctx) permettant de générer un fichier de tags regroupés par langage, écrit dans le format précédent. Indiquer les champs que le visiteur doit posséder. Question 2 : Le fichier initial est complété par des descriptions de documents ; l'url est une chaîne encadrée par des guillemets : language = fr tag = ville tag = pays tag = événement language = en tag = city tag = country documents doc1 { url = "http://1" doctags = ville, musique, event } doc2 { url = "http://2" doctags = ville, pays, cinéma } doc3 { url = "http://3" doctags = country, event } On veut ajouter dans le fichier compte-rendu la liste des tags non déclarés : Non déclarés : musique, event, cinéma 1. Compléter la grammaire. 2. Modifier le fichier de templates pour générer la sortie des tags absents. 3. Indiquer les structures de données qui seront utilisées dans le visiteur. Compléter le visiteur pour générer la liste de tags non déclarés.