École Polytechnique de Montréal Département de génie informatique et logiciel. LOG3210 Éléments de langages et compilateurs.

Documents pareils
Chap 4: Analyse syntaxique. Prof. M.D. RAHMANI Compilation SMI- S5 2013/14 1

Compilation. Algorithmes d'analyse syntaxique

RAPPELS SUR LES METHODES HERITEES DE LA CLASSE RACINE Object ET LEUR SPECIALISATION (i.e. REDEFINITION)

Structure d un programme et Compilation Notions de classe et d objet Syntaxe

Programmation Web. Madalina Croitoru IUT Montpellier

INTRODUCTION A JAVA. Fichier en langage machine Exécutable

Une introduction à Java

Java Licence Professionnelle CISII,

STAGE IREM 0- Premiers pas en Python

Théorie des Langages

Programmer en JAVA. par Tama

Les structures. Chapitre 3

Prénom : Matricule : Sigle et titre du cours Groupe Trimestre INF1101 Algorithmes et structures de données Tous H2004. Loc Jeudi 29/4/2004

GOL502 Industries de services

Expression des contraintes. OCL : Object C o n t r a i n t L a n g u a g e

TD3: tableaux avancées, première classe et chaînes

Initiation à l algorithmique

TP 1. Prise en main du langage Python

LMI 2. Programmation Orientée Objet POO - Cours 9. Said Jabbour. jabbour@cril.univ-artois.fr

Algorithmique et Programmation, IMA

Licence Bio Informatique Année Premiers pas. Exercice 1 Hello World parce qu il faut bien commencer par quelque chose...

as Architecture des Systèmes d Information

Le code à barres EAN 13 mes premiers pas...

Info0101 Intro. à l'algorithmique et à la programmation. Cours 3. Le langage Java

Initiation à la Programmation en Logique avec SISCtus Prolog

Introduction à Java. Matthieu Herrb CNRS-LAAS. Mars

IN Cours 1. 1 Informatique, calculateurs. 2 Un premier programme en C

Cours 1 : Introduction Ordinateurs - Langages de haut niveau - Application

Utilisation d objets : String et ArrayList

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP

Plan du cours. Historique du langage Nouveautés de Java 7

ACTIVITÉ DE PROGRAMMATION

1. Structure d un programme C. 2. Commentaire: /*..texte */ On utilise aussi le commentaire du C++ qui est valable pour C: 3.

Bases de programmation. Cours 5. Structurer les données

4 Exemples de problèmes MapReduce incrémentaux

Les technologies du Big Data

Modèles de Calcul. Yassine Lakhnech. 2007/08 Université Joseph Fourier Lab.: VERIMAG. Modèles de Calcul Start p.

Cours d Algorithmique-Programmation 2 e partie (IAP2): programmation 24 octobre 2007impérative 1 / 44 et. structures de données simples

4. Groupement d objets

Suivant les langages de programmation, modules plus avancés : modules imbriqués modules paramétrés par des modules (foncteurs)

Cours intensif Java. 1er cours: de C à Java. Enrica DUCHI LIAFA, Paris 7. Septembre Enrica.Duchi@liafa.jussieu.fr

Introduction au langage C

Machines virtuelles fonctionnelles (suite) Compilation ML Java

27/11/12 Nature. SDK Python et Java pour le développement de services ACCORD Module(s)

Grandes lignes ASTRÉE. Logiciels critiques. Outils de certification classiques. Inspection manuelle. Definition. Test

Implémentation parallèle de certains algorithmes de fouille de données avec le framework MapReduce

Cours de Programmation 2

Lambda! Rémi Forax Univ Paris-Est Marne-la-Vallée

SUPPORT DE COURS. Langage C

Remise à niveau d un programme JAVA du domaine public

Évaluation d une architecture de stockage RDF distribuée

Fiche programme Stage OmniPcx Office Communication Base R7.x (PCIS_OBAR7xJ4)

Cours de C. Petits secrets du C & programmation avancée. Sébastien Paumier

Le langage C++ est un langage de programmation puissant, polyvalent, on serait presque tenté de dire universel, massivement utilisé dans l'industrie

PHP et mysql. Code: php_mysql. Olivier Clavel - Daniel K. Schneider - Patrick Jermann - Vivian Synteta Version: 0.9 (modifié le 13/3/01 par VS)

Chapitre I Notions de base et outils de travail

Premiers Pas en Programmation Objet : les Classes et les Objets

Notions fondamentales du langage C# Version 1.0

Cours d algorithmique pour la classe de 2nde

TP n 2 Concepts de la programmation Objets Master 1 mention IL, semestre 2 Le type Abstrait Pile


Seance 2: En respectant la méthode de programmation par contrat, implémentez les autres fonctions de jeu.

Rappel. Analyse de Données Structurées - Cours 12. Un langage avec des déclaration locales. Exemple d'un programme

Génie Logiciel avec Ada. 4 février 2013

Cours 1 : Qu est-ce que la programmation?

Initiation à la programmation en Python

Introduction à la programmation Travaux pratiques: séance d introduction INFO0201-1

Traduction des Langages : Le Compilateur Micro Java

Arbres binaires de recherche

Performances Veille. Système d Information. Semaine 25 du 18 au 24 juin Numéro 228

Éléments d informatique Cours 3 La programmation structurée en langage C L instruction de contrôle if

Java Licence Professionnelle CISII,

Séance 1 Introduction aux bases de données

Tp 1 correction. Structures de données (IF2)

Licence Sciences et Technologies Examen janvier 2010

A QUOI SERVENT LES BASES DE DONNÉES?

TP1 : Initiation à Java et Eclipse

Programmation Orientée Objet Java

Langage et Concepts de ProgrammationOrientée-Objet 1 / 40

Analyse de sécurité de logiciels système par typage statique

Programmation Orientée Objets Le Langage JAVA

Probabilités. Une urne contient 3 billes vertes et 5 billes rouges toutes indiscernables au toucher.

IFT3902 : (Gestion de projet pour le) développement, (et la) maintenance des logiciels

Le Dessin Technique.

INF2015 Développement de logiciels dans un environnement Agile. Examen intra 20 février :30 à 20:30

L exclusion mutuelle distribuée

FctsAffines.nb 1. Mathématiques, 1-ère année Edition Fonctions affines

Théorie de la Programmation

Organigramme / Algorigramme Dossier élève 1 SI

Exceptions. 1 Entrées/sorties. Objectif. Manipuler les exceptions ;

Corrigés des premiers exercices sur les classes

Lier Erlang avec d autres langages de programmation

Solutions du chapitre 4

Devenez un véritable développeur web en 3 mois!

MATLAB : COMMANDES DE BASE. Note : lorsqu applicable, l équivalent en langage C est indiqué entre les délimiteurs /* */.

Cours d introduction à l informatique. Partie 2 : Comment écrire un algorithme? Qu est-ce qu une variable? Expressions et instructions

Le chiffre est le signe, le nombre est la valeur.

Votre premier projet Android

Programme Compte bancaire (code)

Transcription:

École Polytechnique de Montréal Département de génie informatique et logiciel LOG3210 Éléments de langages et compilateurs Intra hiver 2013 Solutionnaire

Question 1 Grammaires (10 points) Soit la grammaire d expressions booléennes : bexpr bterm bfactor bexpr or bterm bterm bterm and bfactor bfactor not bfactor ( bexpr ) true false a) Quels sont les symboles terminaux? b) Quels sont les symboles non-terminaux? c) Quel est le symbole de départ (symbole START)? d) Combien y a-t-il de règles de production? e) Cette grammaire génère-t-elle des erreurs lorsque compilée avec JavaCC? Si oui, expliquez pourquoi. Si non, expliquez pourquoi. Solution : a) or and not ( ) true false b) bexpr, bterm, bfactor c) bexpr d) 8 e) Non, elle n est pas compatible à cause de la récursivité à gauche aux deux premières règles. À titre indicatif, voici la grammaire modifiée pour éliminer la récursivité à gauche : bexpr bexpr bterm bterm bfactor bterm bexpr or bterm bexpr ε bfactor bterm and bfactor bterm ε not bfactor ( bexpr ) true false

Question 2 Construction d un parseur descendant récursif (30 points) La grammaire suivante décrit une partie du langage JSON (JavaScript Object Notation), souvent utilisé dans les applications Web pour l échange de données : object { members { members pair, members pair pair : value value object num a) Écrivez le code du parseur descendant récursif prédictif (parseur LL(1) ) implantant cette grammaire. Vous pouvez coder dans le langage de votre choix. NOTE : La grammaire a été reproduite en annexe si vous désirez la détacher. Considérez que la variable lookahead contient le terminal courant dans l entrée. La méthode match vous est également fournie : void match (terminal t) { if (lookahead == t) { lookahead = nextterminal (); else { error (); À titre indicatif, le terminal représente des chaînes de caractères délimitées par des guillemets (ex : "bonjour") et le terminal num représente des nombres (ex : 123 ou encore 35.78). Voici un exemple d entrée acceptée par cette grammaire : { "item" : "Pain", "prix" : 4.78, "stocks" : { "entrepot" : 10000, "magasin": 50

Solution : La grammaire comporte des règles qui ont des préfixes communs. Il faut donc procéder à une factorisation à gauche. La grammaire résultante est la suivante : object { object object members members pair members members, members ε pair : value value object num Afin de construire le parseur prédictif, nous devons calculer les first de chaque nonterminal : a) First(object) = { { b) First(members) = { c) First(pair) = { d) First(value) = { {,, num Le code du parseur descendant récursif prédictif est le suivant : void object() { match({); object_prime(); void object_prime() { switch(lookahead){ case : members(); match(); break; case : match(); break; default: error(); void members() { pair(); members_prime();

void members_prime() { if(lookahead ==,) match(,); members(); void pair() { match(); match(:); value(); void value() { switch(lookahead){ case {: object(); break; case : match(); break; case num: match(num); break; default: error();

Question 3 Construction d un parseur ascendant (30 points) La grammaire JSON de la question précédente a été reprise ici. Les non-terminaux ont été abrégés, la grammaire a été augmentée et les règles ont été numérotées : 0. O O 1. O { M 2. O { 3. M P, M 4. M P 5. P : V 6. V O 7. V 8. V num La figure qui suit, reproduite en annexe si vous désirez la détacher, représente l automate Simple LR (SLR) de cette grammaire, construit à partir de l ensemble d items LR(0) : I 0 O O O {M O { O I 1 O O $ acc M I 3 O {M I 7 O {M I 11 P : V { I 2 O { M O { M P,M M P P : V V P I 4 O { I 5 M P,M M P, P I 8 M P, M M P,M M P P : V I 10 M P, M M I 12 V O I 13 V I 14 V num O num I 6 P : V : I 9 P : V V O V V num

a) Étant donnés la grammaire augmentée et numérotée et son automate SLR, remplissez la table de parsage SLR suivante : État Action Goto {, : num $ O M P V 0 s2 1 1 acc 2 s4 s6 3 5 3 s7 4 r2 r2 r2 5 r4 s8 6 s9 7 r1 r1 r1 8 s6 10 5 9 s13 s14 12 11 10 r3 11 r5 r5 12 r6 r6 13 r7 r7 14 r8 r8 Respectez les conventions du livre du dragon : 1. sx (shift X) signifie décaler l entrée et empiler l état X. 2. ry (reduce Y) signifie réduire par la règle de production Y. 3. acc (accept) signifie que la chaîne d entrée est valide; le parseur arrête. 4. Une case vide signale une erreur; le parseur arrête. Solution : Pour calculer les reduce, il faut déterminer les follow de chaque non-terminal : a) Follow(O) = { $, b) Follow(M) = { c) Follow(P) = {, d) Follow(V) = {,

Question 4 Traduction dirigée par la syntaxe (20 points) En vous basant sur la grammaire JSON simplifiée de la question 3, écrivez une traduction dirigée par la syntaxe (SDT) qui permettra de reconstruire en mémoire l objet représenté par une chaîne de caractères de type JSON. Les object, dénotés par le nonterminal O, seront représentés par des tables de hachage et les pair, dénotées par le non-terminal P, formeront les paires de clé et valeur à ajouter dans la table de hachage. Finalement, la SDT produite doit être attribuée à gauche (L-attributed). Répondez directement dans les cases du tableau. En termes d effets de bord, vous pouvez seulement faire appel aux fonctions suivantes : 1. new HashMap() : Crée et retourne une référence vers une table de hachage. 2. put(table, clé, valeur) : Ajoute une paire (clé, valeur) dans la table table. Règle de production Actions sémantiques O { M O.map = new HashMap(); M.map = O.map; O { O.map = new HashMap(); M P, M 1 P.map = M.map; M 1.map = M.map; M P P.map = M.map; P : V put(p.map,.lexval, V.val) V O V.val = O.map V V.val =.lexval V num V.val = num.lexval

Question 5 Création d une grammaire (10 points) Écrivez une grammaire qui permette de reconnaître l ensemble de toutes les chaînes de caractères, de longueur 1, composées uniquement de 0 et de 1, et qui sont des palindromes; c est-à-dire que la chaîne de caractères se lit de la même manière de gauche à droite ou de droite à gauche. Solution : S 0 S 0 1 S 1 00 11 0 1

Annexe 1 : Grammaire JSON détachable object { members { members pair, members pair pair : value value object num

Annexe 2 : Grammaire JSON augmentée et automate SLR détachables 0. O O 1. O { M 2. O { 3. M P, M 4. M P 5. P : V 6. V O 7. V 8. V num I 0 O O O {M O { O I 1 O O $ acc M I 3 O {M I 7 O {M I 11 P : V { I 2 O { M O { M P,M M P P : V V P I 4 O { I 5 M P,M M P, P I 8 M P, M M P,M M P P : V I 10 M P, M M I 12 V O I 13 V I 14 V num O num I 6 P : V : I 9 P : V V O V V num