Langages et Compilation. Analyse descendante prédictive



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

Théorie des Langages

Compilation. Algorithmes d'analyse syntaxique

chapitre 4 Nombres de Catalan

Algorithmes d'apprentissage

Initiation à l algorithmique

Projet d informatique M1BI : Compression et décompression de texte. 1 Généralités sur la compression/décompression de texte

CH.6 Propriétés des langages non contextuels

Cours d Analyse. Fonctions de plusieurs variables

Exercices - Polynômes : corrigé. Opérations sur les polynômes

Exo7. Matrice d une application linéaire. Corrections d Arnaud Bodin.

Algorithmique et Programmation, IMA

Les chaînes de caractères

Travaux pratiques. Compression en codage de Huffman Organisation d un projet de programmation

Arbres binaires de recherche

Structures algébriques

Représentation d un entier en base b

Exercices - Fonctions de plusieurs variables : corrigé. Pour commencer

Résolution de systèmes linéaires par des méthodes directes

Théorème du point fixe - Théorème de l inversion locale

Algorithmes récursifs

2. RAPPEL DES TECHNIQUES DE CALCUL DANS R

Chapitre 5 : Flot maximal dans un graphe

Architecture des ordinateurs TD1 - Portes logiques et premiers circuits

FONCTIONS DE PLUSIEURS VARIABLES (Outils Mathématiques 4)

NOMBRES COMPLEXES. Exercice 1 :

Protocoles DHCP et DNS

Vers l'ordinateur quantique

LES OUTILS D ALIMENTATION DU REFERENTIEL DE DB-MAIN

Simulation de variables aléatoires

Problème : Calcul d'échéanciers de prêt bancaire (15 pt)

Pour l épreuve d algèbre, les calculatrices sont interdites.

Chapitre 2. Eléments pour comprendre un énoncé

Initiation à la programmation en Python

* très facile ** facile *** difficulté moyenne **** difficile ***** très difficile I : Incontournable T : pour travailler et mémoriser le cours

Calcul de développements de Puiseux et application au calcul du groupe de monodromie d'une courbe algébrique plane

Continuité et dérivabilité d une fonction

DOCM Solutions officielles = n 2 10.

t 100. = 8 ; le pourcentage de réduction est : 8 % 1 t Le pourcentage d'évolution (appelé aussi taux d'évolution) est le nombre :

BANQUES DE DONNÉES PÉDAGOGIQUES

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

Calcul matriciel. Définition 1 Une matrice de format (m,n) est un tableau rectangulaire de mn éléments, rangés en m lignes et n colonnes.

Plan. Exemple: Application bancaire. Introduction. OCL Object Constraint Language Le langage de contraintes d'uml

1 radian. De même, la longueur d un arc de cercle de rayon R et dont l angle au centre a pour mesure α radians est α R. R AB =R.

INF601 : Algorithme et Structure de données

Jade. Projet Intelligence Artificielle «Devine à quoi je pense»

Cours No 3 : Identificateurs, Fonctions, Premières Structures de contrôle.

Intégration et probabilités TD1 Espaces mesurés Corrigé

Correction Code nécessaire à la compilation : let bs ="\\" let nl = "\n" ;; let appliquer = List.map ;; (* affichage d'un noeud *)

Présentation du langage et premières fonctions

Pourquoi l apprentissage?

Baccalauréat ES Pondichéry 7 avril 2014 Corrigé

Mesurer les performances (CPU) sous Linux

Conception de circuits numériques et architecture des ordinateurs

Résolution d équations non linéaires

Initiation à la Programmation en Logique avec SISCtus Prolog

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

Qu est-ce qu une probabilité?

Fonctions de plusieurs variables

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

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

ZOTERO Un outil gratuit de gestion de bibliographies

Fonctions de plusieurs variables

Recherche dans un tableau

Logique : ENSIIE 1A - contrôle final

RapidMiner. Data Mining. 1 Introduction. 2 Prise en main. Master Maths Finances 2010/ Présentation. 1.2 Ressources

Géométrie dans l espace Produit scalaire et équations

Exercice 3 (5 points) A(x) = 1-e -0039' e- 0,039x A '() -'-,..--,-,--,------:-- X = (l_e-0,039x)2

Plan du cours : Zippers. Des fonctions sur les listes avec position. Des fonctions sur les listes avec position

MIS 102 Initiation à l Informatique

par Denis-Charles Cisinski & Georges Maltsiniotis

Exercice autour de densité, fonction de répatition, espérance et variance de variables quelconques.

Du Premier au Second Degré

Axiomatique de N, construction de Z

Licence Sciences, Technologies, Santé Mention Informatique Codage de l'information

Optimisation non linéaire Irène Charon, Olivier Hudry École nationale supérieure des télécommunications

Exo7. Calculs de déterminants. Fiche corrigée par Arnaud Bodin. Exercice 1 Calculer les déterminants des matrices suivantes : Exercice 2.

Fondements de l informatique Logique, modèles, et calculs

Les algorithmes de base du graphisme

Développements limités. Notion de développement limité

Probabilités sur un univers fini

Compte-rendu de projet de Système de gestion de base de données

IV- Equations, inéquations dans R, Systèmes d équations

Complexité. Licence Informatique - Semestre 2 - Algorithmique et Programmation

a et b étant deux nombres relatifs donnés, une fonction affine est une fonction qui a un nombre x associe le nombre ax + b

3 Approximation de solutions d équations

Partie 1 - Séquence 3 Original d une fonction

Le modèle standard, SPE (1/8)

TOUT CE QU IL FAUT SAVOIR POUR LE BREVET

Théorie des Graphes Cours 3: Forêts et Arbres II / Modélisation

Algorithmes de recherche

Encryptions, compression et partitionnement des données

Exercices - Nombres complexes : corrigé. Formes algébriques et trigonométriques, module et argument

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP

Conception. Génie Logiciel. Renaud Marlet. LaBRI / INRIA (d'après A.-M. Hugues) màj 17/04/2007

INF 232: Langages et Automates. Travaux Dirigés. Université Joseph Fourier, Université Grenoble 1 Licence Sciences et Technologies

Chapitre 2 Le problème de l unicité des solutions

1. Qu'est-ce que SQL? La maintenance des bases de données Les manipulations des bases de données... 5

Algorithmique avec Algobox

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

Transcription:

Langages et Compilation Analyse descendante prédictive 1

Introduction Grammaires LL(1) Une famille de grammaires analysables de façon ecace. Caractéristiques de l'analyse LL(1) analyse descendante Construction de l'arbre de dérivation selon l'ordre préxé : on part de la racine (l'axiome) et on descend vers les feuilles (les terminaux) en développant le n ud interne (une variable) le plus à gauche. analyse prédictive Pour développer le n ud, on choisit la règle à appliquer en prévisualisant le symbole courant du mot analysé. x x c X? 2

Introduction Exemple + a Les chaînes dérivées de commencent toutes par un terminal distinct À partir du terminal courant du mot analysé, on sait déterminer la bonne règle. + a + a Analyse du mot a + a a a a + a a a + a a a + a a + 3

Introduction Exemple ab ε Le choix devient plus délicat lorsque la grammaire comprend des ε-productions. Quel critère doit-on prendre en compte pour choisir entre la règle ab et la règle ε? On est amené à considérer les terminaux qui peuvent suivre. Convention pratique, on introduit un terminal particulier $ pour marquer la n du mot à analyser. $ et b (mais pas a) peuvent se retrouver à droite de. On sait alors déterminer la règle à appliquer au vu du terminal courant. $ a b ε ab ε 4

Introduction Exemple ab ε sa table d'analyse $ a b ε ab ε a Analyse du mot ab $ a b b a ε b $ a ε b ε 5

Introduction Condition pour une analyse LL(1) à chaque étape, pour la variable X à développer et le terminal courant c en entrée, le choix de la dérivation à appliquer doit être déterministe. L lecture de l'entrée de la gauche vers la droite (Left to right scanning) L construction d'une dérivation gauche (Left derivation) 1 symbole de l'entrée pour prédire la bonne règle L'analyse LL(1) se base sur une table qui indique, pour la variable X et le terminal c, la règle correcte à appliquer. Pour construire cette table d'analyse, on détermine au préalable : 1. les variables eaçables 2. les ensembles Premier 3. les ensembles uivant 6

Les variables eaçables Une chaîne α N est dite eaçable si le mot vide se dérive de α : α ε Calcul des variables eaçables On construit par récurrence sur i, l'ensemble E i des variables A. E 0 = {A N : A ε P} E i +1 = {A N : A α P et α E i } Arrêt lorsque E i +1 = E i (au bout d'au plus N étapes) Exemple XY X axb ε Y cz Ze Z dcz ε E 0 = {X, Z} = E 1 7

Les ensembles Premier oit α une chaîne de ( Σ N ). Premier(α) est l'ensemble des terminaux qui débutent les chaînes dérivées de α : {a Σ : α aβ où β (Σ N) } Calcul des ensembles Premier Pour un terminal a : Premier(aβ) = {a} Pour une variable X : Premier(X ) = X β P Premier(β) Premier(X β) = { Premier(X ) si X n'est pas eaçable Premier(X ) Premier(β) sinon 8

Les ensembles Premier Exemple XY X axb ε Y cz Ze Z dcz ε Calcul des ensembles Premier pour les variables : Premier() = Premier(XY ) XY = Premier(X ) Premier(Y ) X eaçable Premier(X ) = Premier(aXb) X axb ε = {a} Premier(Y ) = Premier(cZ) Premier(Ze) Y cz Ze = {c} Premier(Z) {e} Z eaçable Premier(Z) = Premier(dcZ) Z dcz ε = {d} 9

Les ensembles uivant oit X une variable. uivant(x ) est l'ensemble des terminaux qui peuvent apparaître après X dans une dérivation : {a Σ : αxaβ où α, β (Σ N) } i.e. uivant(x ) = Premier(β uivant(y )) Y αx β P Calcul des ensembles uivant Mettre $ dans uivant() (où est l'axiome) Pour chaque variable X, examiner chaque production Y αx β où X est à droite : i β ε, ajouter les éléments de Premier(β) à uivant(x ) i β ε, ajouter les éléments de uivant(y ) à uivant(x ) 10

Les ensembles uivant Exemple XY X axb ε Y cz Ze Z dcz ε Calcul des ensembles uivant : uivant() contient $ uivant(x ) XY Premier(Y uivant()) uivant(x ) Premier(Y ) uivant(x ) X axb b uivant(x ) uivant(y ) XY uivant() uivant(y ) uivant(z) Y cz uivant(y ) uivant(z) Y Ze e uivant(z) Z dcz uivant(z) uivant(z) (Y non eaçable) 11

Les variables Eaçables et les ensembles Premier et uivant Exemple XY X axb ε Y cz Ze Z dcz ε Bilan des calculs : Eaçable Premier uivant non a c d e $ X oui a b c d e Y non c d e $ Z oui d $ e 12

Construction de la table d'analyse Table à deux dimensions indexée par les variables et les terminaux Pour toute production X α : Ajouter X α à l'entrée T [X, a] pour tout terminal a dans Premier(α) i α est eaçable, ajouter X α dans la case T [X, a] pour tout terminal a dans uivant(x ) XY X axb ε Y cz Ze Z dcz ε Eaçable Premier uivant non a c d e $ X oui a b c d e Y non c d e $ Z oui d $ e $ a b c d e XY XY XY XY X X axb X ε X ε X ε X ε Y Y cz Y Ze Y Ze Z Z ε Z dcz Z ε 13

Grammaire LL(1) Dénition Une grammaire est LL(1) s'il existe au plus une production par entrée dans la table. Proposition Une grammaire est LL(1) si pour toute paire de productions A α et A β, on a : Premier ( α uivant(a) ) Premier ( β uivant(a) ) = Ainsi une grammaire ne sera pas LL(1) s'il on a : soit un conit Premier/Premier, i.e., deux règles A α β telles que : Premier(α) Premier(β) soit un conit Premier/uivant, i.e., deux règles A α β avec β ε telles que : Premier(α) uivant(a) 14

Grammaire LL(1) Exemple XY X axb ε Y cz Ze Z dcz ε est une grammaire LL(1) a table d'analyse comprend au plus une alternative par case. Le choix de la règle à appliquer se fait de façon déterministe. $ a b c d e XY XY XY XY X X axb X ε X ε X ε X ε Y Y cz Y Ze Y Ze Z Z ε Z dcz Z ε 15

Grammaire LL(1) Exemple XY Z X axb ε Y bx Z bzc c n'est pas une grammaire LL(1) Il existe un conit Premier/Premier pour les règles XY et Z Premier(XY ) = Premier(X ) Premier(Y ) = {a, b} Premier(Z) = {b, c} X eaçable Premier(XY ) Premier(Z) = {b} $ b XY Z 16

Grammaire LL(1) Exemple { axb X bx ε n'est pas une grammaire LL(1) Il existe un conit Premier/uivant pour les règles X bx et X ε Premier(bX ) = {b} uivant(x ) = {b} Premier(X ) uivant(x ) = {b} X $ b X bx X ε 17

Analyseur LL(1) Pour examiner un mot, l'analyseur LL(1) utilise la table d'analyse précédemment construite et une pile. Initialement, la pile contient le marqueur de n de mot $ et l'axiome. Le mot analysé lu de gauche à droite c $ La table d'analyse de la grammaire LL(1) Analyseur LL(1) $ La pile L'arbre d'analyse à construire 18

Analyseur LL(1) À chaque étape, on examine le terminal courant c du mot analysé et le sommet de la pile (premier symbole non traité de l'arbre en construction). oit le sommet de la pile est un terminal a : si a c, l'analyse s'arrête et retourne ÉCHEC si a = c = $, l'analyse s'arrête et retourne UCCÈ si a = c $, a est dépilé et on avance dans la lecture du mot analysé oit le sommet de la pile est une variable X : si l'entrée T [X, c] est vide, l'analyse s'arrête et retourne ÉCHEC si l'entrée T [X, c] contient une règle X α, X est dépilé et α est empilé en partant de la droite (par exemple, si X YzT, T est empilé, puis z, puis Y ). 19

Analyseur LL(1) $ a b c d e XY XY XY XY X X axb X ε X ε X ε X ε Y Y cz Y Ze Y Ze Z Z ε Z dcz Z ε Mot analysé Pile abdce $ $ XY abdce $ X Y $ X axb X X Y Y abdce $ ax by $ assortiment a X b 20

Mot analysé Pile abdce $ X by $ X ε X Y ε abdce $ by $ assortiment abdce $ Y $ Y Ze a X b X a X b ε abdce $ Ze $ Z dcz X Z Y Y e a X b Z e abd ce $ d cz e $ assortiment ε d c Z 21

Mot analysé Pile abdce $ cz e $ assortiment abdce $ Ze $ Z ε X Y a X b Z e ε d c Z abdce $ e $ assortiment abdce $ $ UCCE ε Le coût de l'analyse du mot est linéaire en la taille de l'arbre. 22

Analyseur LL(1) $ a b c d e XY XY XY XY X X axb X ε X ε X ε X ε Y Y cz Y Ze Y Ze Z Z ε Z dcz Z ε Mot analysé Pile abbab $ $ XY abbab $ X Y $ X axb abbab $ ax by $ assortiment abbab $ X by $ X ε abbab $ by $ assortiment abbab $ Y $ ECHEC 23

Rendre une grammaire LL(1) Proposition Une grammaire ne peut pas être LL(1) si elle est : soit ambiguë, soit récursive gauche, soit n'est pas factorisée à gauche. On peut modier la grammaire pour tenter de la rendre LL(1) mais le résultat n'est pas garanti. Proposition Il existe des grammaires non ambiguës, non récursives gauche et factorisées à gauche qui ne sont pas LL(1). 24

Rendre une grammaire LL(1) Par élimination de la récursivité gauche Exemple E E + T T T T F F F (E) nb n'est pas LL(1) car récursive gauche Il existe un conit Premier/Premier pour les règles E E + T et E T à cause de la récursivité gauche de E et un conit Premier/Premier pour les règles T T F et T F à cause de la récursivité gauche de T E T $ ( nb ) + E E + T E E + T E T E T T T F T T F T F T F F F (E) F nb 25

Rendre une grammaire LL(1) Par élimination de la récursivité gauche upprimer la récursivité gauche rend cette grammaire LL(1) E E + T T T T F F F (E) nb E TY Y +TY ε T FZ Z FZ ε F (E) nb 26

Rendre une grammaire LL(1) Par élimination de la récursivité gauche E TY Y +TY ε T FZ Z FZ ε F (E) nb Eaçable Premier uivant E non ( nb $ ) Y oui + $ ) T non ( nb $ ) + Z oui $ ) + F non ( nb $ ) + $ ( nb ) + E E TY E TY Y Y ε Y ε Y +TY T T FZ T FZ Z Z ε Z ε Z ε Z FZ F F (E) F nb 27

Rendre une grammaire LL(1) Par substitution et factorisation Exemple E TR T id (E) A R +E ε A id[e] n'est pas LL(1) Il existe un conit Premier/Premier pour les règles T id et T A T $ id T id T A 28

Rendre une grammaire LL(1) Par substitution et factorisation On eectue une substitution avant de factoriser à gauche. E TR T id (E) A R +E ε A id[e] ubstitution E TR T id (E) id[e] R +E ε Factorisation à gauche E TR T id X (E) X [E] ε R +E ε 29

Rendre une grammaire LL(1) Par substitution et factorisation On obtient une grammaire LL(1) E TR T id X (E) X [E] ε R +E ε Eaçable Premier uivant E non id ( $ ) ] T non id ( $ ) ] + X oui [ $ ) ] + R oui + $ ) ] $ + id ( ) [ ] E E TR E TR T T id X T (E) X X ε X ε X ε X [E] X ε R R ε R +E R ε R ε 30

Rendre une grammaire LL(1) ou rendre l'analyse déterministe La grammaire des instructions de branchements conditionnels { I si E alors I sinon I si E alors I a E b même factorisée I si E alors I J a J sinon I ε E b n'est pas LL(1) car ambiguë. I I si E alors I J si E alors I J b si E alors I J sinon I b si E alors I J ε b a ε a b a sinon I a le mot si b alors si b alors a sinon a admet deux arbres d'analyse 31

Rendre une grammaire LL(1) ou rendre l'analyse déterministe L'ambiguïté engendre un conit Premier/uivant pour les règles J sinon I et J ε J $ sinon J ε J sinon I J ε Avec la convention usuelle d'associer le sinon avec le si le plus proche, on peut rendre l'analyseur déterministe et le forcer à produire l'arbre voulu en privilégiant la règle J sinon I au détriment de la règle J ε. si E b I alors I si E alors I b a J sinon I a J ε 32

Analyse LL(k) Généralisation de l'analyse LL(1) avec prévisualisation non pas juste d'un symbole mais d'un nombre xé k de symboles. Une grammaire est LL(k) si l'analyseur peut choisir de façon déterministe la règle à appliquer en examinant les k symboles courants de l'entrée. On note : w k = { w si w est de longueur au plus k le préxe de longueur k de w sinon Premier k (α) = {w k : α w} uivant k (A) = {w : β, γ t.q. βaγ et w Premier k (γ)} Proposition Une grammaire est LL(k) si pour toute paire de productions A α et A β, on a : Premier k ( α uivantk (A) ) Premier k ( β uivantk (A) ) = 33

Analyse LL(k) Exemple { abx ε X aa b n'est pas une grammaire LL(1) Eaçable Premier uivant oui a $ a X non a b $ a Conit Premier/uivant : Premier(abX ) uivant() $ a b abx ε ε X X aa X b 34

Analyse LL(k) { abx ε X aa b est une grammaire LL(2) Eaçable Premier 2 uivant 2 oui ab $ aa X non aa ab b $ aa En prévisualisant deux lettres, il n'y a plus de conit : Premier 2 (abx ) uivant 2 () = $ aa ab b ε ε abx X X aa X aa X b 35

Analyse LL(k) $ aa ab b ε ε abx X X aa X aa X b Mot analysé Pile abaa $ $ abx abaa $ abx $ assortiment abaa $ bx $ assortiment abaa $ X $ X aa abaa $ aa $ ε abaa $ aa $ assortiment abaa $ a $ assortiment abaa $ $ UCCE 36

Analyse LL(k) Fait Il existe des grammaires ni ambiguës, ni récursives gauche qui ne sont LL(k) pour aucun k. Exemple A B A aab c B abbb d a k Premier k (A) Premier k (B) pour tout k Conit Premier/Premier pour tout k Exemple { ab ba ε Premier k (ab) uivant k () = {a}{a, b} k 2 {b} pour tout k Conit Premier/uivant pour tout k 37

Analyse syntaxique avec ANTLR ANTLR4 met en uvre une analyse descendante prédictive qui a les caractéristiques suivantes factorisation à gauche de la grammaire automatique suppression automatique des récursivités gauches immédiates (mais pas des récursivités gauches indirectes, e.g. A Bα, B Aβ) résolution de certaines ambiguïtés en jouant sur l'ordre des productions pour lever celles liées aux priorités des opérateurs pour les ambiguïtés dues à l'associativité, par défaut l'association s'eectue à gauche ou de façon explicite à droite, e.g. l'exponentielle, expr : expr assoc = right expr basé sur une stratégie LL(k) enrichi d'un mécanisme additionnel qui permet de traiter plus que les grammaires LL(k) mais qui induit alors un surcoût en temps 38