Compilation. Algorithmes d'analyse syntaxique



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

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

Théorie des Langages

Les formations de remise à niveau(!) l'entrée des licences scientifiques. Patrick Frétigné CIIU

Baccalauréat ES Antilles Guyane 12 septembre 2014 Corrigé

Structures algébriques

Fonction inverse Fonctions homographiques

RÉSOLUTION DE SYSTÈMES À DEUX INCONNUES

2. RAPPEL DES TECHNIQUES DE CALCUL DANS R

Fonctions de plusieurs variables

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

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

Complément d information concernant la fiche de concordance

La fonction exponentielle

NOTATIONS PRÉLIMINAIRES

Rapport d'analyse des besoins

CHAPITRE VIII : Les circuits avec résistances ohmiques

Cours 1 : Qu est-ce que la programmation?

Résolution d équations non linéaires

Probabilités conditionnelles Exercices corrigés

INTRODUCTION. A- Modélisation et paramétrage : CHAPITRE I : MODÉLISATION. I. Paramétrage de la position d un solide : (S1) O O1 X

Probabilités et Statistiques. Feuille 2 : variables aléatoires discrètes

Chapitre 1 : Introduction aux bases de données

chapitre 4 Nombres de Catalan

Programme et contenus Licence d'informatique de Lille, parcours MIAGE, en alternance ou en formation continue (13:40)

BANQUES DE DONNÉES PÉDAGOGIQUES

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

SINE QUA NON. Découverte et Prise en main du logiciel Utilisation de bases

1. Introduction Création d'une macro autonome Exécuter la macro pas à pas Modifier une macro... 5

LE PROBLEME DU PLUS COURT CHEMIN

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

LES OUTILS D ALIMENTATION DU REFERENTIEL DE DB-MAIN

Dérivation : Résumé de cours et méthodes

M2 IAD UE MODE Notes de cours (3)

Chapitre 4 : les stocks

Calculs de probabilités avec la loi normale

Transducteurs d arbres et (peut-être un peu) apprentissage

Pourquoi l apprentissage?

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

Algorithmes de recherche

Simulation de variables aléatoires

Articles sur le thème "Sécurité"

Sauvegarder et restaurer les données PMB

CALCUL DES PROBABILITES

Cours3. Applications continues et homéomorphismes. 1 Rappel sur les images réciproques

Baccalauréat ES/L Amérique du Sud 21 novembre 2013

Exo7. Probabilité conditionnelle. Exercices : Martine Quinio

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

Méthodes de quadrature. Polytech Paris-UPMC. - p. 1/48

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

Cours 1 : La compilation

Manuel utilisateur. Version 1.6b

Limites finies en un point

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

DÉRIVÉES. I Nombre dérivé - Tangente. Exercice 01 (voir réponses et correction) ( voir animation )

MICROINFORMATIQUE NOTE D APPLICATION 1 (REV. 2011) ARITHMETIQUE EN ASSEMBLEUR ET EN C

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

Fonctions de plusieurs variables : dérivés partielles, diérentielle. Fonctions composées. Fonctions de classe C 1. Exemples

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

Introduction. I Étude rapide du réseau - Apprentissage. II Application à la reconnaissance des notes.

Correction du baccalauréat ES/L Métropole 20 juin 2014

Al attention du praticien et des étudiants, nous avons développé

TSTI 2D CH X : Exemples de lois à densité 1

Raisonnement probabiliste

Exercices de dénombrement

La syllabe (1/5) Unité intuitive (différent du phonème) Constituant essentiel pour la phonologie au même titre que phonème et trait

Continuité et dérivabilité d une fonction

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

Arithmétique binaire. Chapitre. 5.1 Notions Bit Mot

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

Fonctions de deux variables. Mai 2011

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

Représentation des Nombres

Diagramme de classes

Introduction à MATLAB R

U102 Devoir sur les suites (TST2S)

Post-production ~ captation audio/vidéo ~ RMLL 2010, Bordeaux

Présentation du langage et premières fonctions

Guide de démarrage rapide Centre de copies et d'impression Bureau en Gros en ligne

GEA II Introduction aux probabilités Poly. de révision. Lionel Darondeau

Analyse stochastique de la CRM à ordre partiel dans le cadre des essais cliniques de phase I

Fonctions linéaires et affines. 1 Fonctions linéaires. 1.1 Vocabulaire. 1.2 Représentation graphique. 3eme

3- FONDEMENTS. Politique relat ve aux contributions financières exigées des parents ou des usagers

1. Introduction Création d'une requête...2

1 Introduction C+ + Algorithm e. languag. Algorigramm. machine binaire. 1-1 Chaîne de développement. Séance n 4

AGRÉGATION «ÉCONOMIE ET GESTION»

P our appeler : Décrochez le combiné et composez le numéro OU Composez le numéro et décrochez le combiné

Chapitre 4: Dérivée d'une fonction et règles de calcul

Souad EL Bernoussi. Groupe d Analyse Numérique et Optimisation Rabat http ://

Augmenter la portée de votre WiFi avec un répéteur

LE PROCESSUS ( la machine) la fonction f. ( On lit : «fonction f qui à x associe f (x)» )

JEU BOURSIER Séance d introduction à la plateforme de trading SaxoWebTrader. - Pour débutants -

Plateforme de support en ligne. Guide d utilisation

Capacité d un canal Second Théorème de Shannon. Théorie de l information 1/34

BICS Fiche d instruction

Aide - mémoire gnuplot 4.0

Congé de soutien/solidarité familiale

Guide de démarrage rapide

TP 4 de familiarisation avec Unix

Transcription:

Compilation Algorithmes d'analyse syntaxique

Préliminaires Si A est un non-terminal et γ une suite de terminaux et de non-terminaux, on note : A γ si en partant de A on peut arriver à γ par dérivations successives (y compris aucune donc A A).

Préliminaires Non-terminaux : E Terminaux : '+' 'n' 'id' E ::= E '+' E 'id' 'n' E E '+' E 'id' '+' E 'id' '+' E '+' E 'id' '+' E '+' 'n' E E E 'id' '+' E '+' E E 'id' '+' E '+' 'n' 'id' '+' E 'id' '+' E '+' 'n'

Algorithmes d'analyse syntaxique Il existe deux principaux types algorithmes d'analyse syntaxique : prédictifs ou descendants ou LL Left-to-right Leftmost ascendants ou LR Left-to-right Rightmost

Algorithmes d'analyse syntaxique Ces deux algorithmes nécessitent de calculer, à partir de la grammaire algébrique : l'ensemble Annulable (nullable) la fonction Premier (first) la fonction Suivant (follow)

Annulable, premier et suivant Les algorithmes pour calculer ces trois objets ont tous le même déroulement : On dispose de propriétés caractéristiques sur ces objets On applique les propriétés pour obtenir des équations ensemblistes entre ces objets On résoud le système d'équations ensemblistes

Annulable, premier et suivant Dans les propriétés qui suivent : On apprend quelque chose sur X [à l'aide de Y] [quand les Z i sont annulables]

L'ensemble Annulable L'ensemble Annulable contient l'ensemble des non terminaux annulables, c'est-à-dire ceux qui peuvent se dériver en ε, éventuellement en appliquant plusieurs productions : X Annulable si X ε

L'ensemble Annulable Non-terminaux : S X Y Terminaux : 'a' 'c' 'd' Productions : S ::= X Y S 'd' Y ::= 'c' ε X ::= Y 'a' Annulable = {X,Y}

Propriétés de Annulable Propriétés : 1)Si X ::= ε est une productions, alors X est annulable 2)Si X ::= Z 1 Z 2 Z k est une production, et que tous les nonterminaux Z i sont annulables, alors X est annulable. Remarques : S'il n'y a aucune production de type X ::= ε, aucun nonterminal n'est annulable Seules les production dont le membre droit est ε ou ne contient que des non-terminaux sont à considérer Les productions qui donnent des informations sur X sont celles dont le membre gauche est X

Calcul de Annulable On commence par déclarer annulable les non-terminaux X pour lesquels il y a une production X ::= ε À l'aide des productions dont le membre droit ne contient que des non-terminaux, ajouter à l'ensemble Annulable les non-terminaux rendus annulables par la propriété 2) Remarques Une fois que l'on sait un non-terminal annulable, on n'a plus besoin de considérer les productions associées

Exemple Non-terminaux : S X Y Terminaux : 'a' 'c' 'd' Productions : S ::= X Y S 'd' Y ::= 'c' ε X ::= Y 'a' 1)Y est annulable avec Y ::= ε 2)Les productions potentiellement utiles sont X ::= Y et S ::= X Y S 3)X est annulable avec X ::= Y 4)On n'apprend plus rien donc seuls X et Y sont annulables

La fonction Premier La fonction Premier associe à un non-terminal l'ensemble des terminaux qui peuvent apparaître en premier une fois appliquées une ou plusieurs dérivations à partir de ce non-terminal : a Premier(X) si X aγ γ est une suite de terminaux et non-terminaux, éventuellement vide

La fonction Premier Non-terminaux : S E T F Terminaux : '+' '-' ' ' '*' '(' ')' 'id' 'n' '$' Productions : S ::= E '$' E ::= E '+' T '-' T T T ::= T ' ' F '*' F F F ::= 'id' 'n' '(' E ')' Premier(E) = {'(','id','n','*','-'} Premier(T) = {'(','id','n','*'} Premier(F) = {'(','id','n'}

Propriétés de Premier Propriétés : 1)Si X ::= 'a' γ est une production alors 'a' Premier(X) 2)Si X ::= Y γ est une production alors Premier(X) contient tous les terminaux de Premier(Y) 3)Si X ::= Z 1 Z 2 Z k 'a' γ est une production et que les Z i sont annulables alors 'a' Premier(X) (et Premier(X) contient tous les terminaux des Premier(Z i )) 4)Si X ::= Z 1 Z 2 Z k Y γ est une production et que les Z i sont annulables alors Premier(X) contient tous les terminaux de Premier(Y) (et des Premier(Z i ))

Propriétés de Premier Remarques 1)Les productions qui donnent des informations sur X sont celles dont le membre gauche est X 2)La production E ::= E γ enseigne que Premier(E) contient Premier(E), ce que l'on savait déjà, mais attention si E est annulable

Calcul de Premier Calculer l'ensemble Annulable Pour chaque non-terminal E, appliquer les propriétés aux productions dont le membre gauche est E pour trouver Premier(E) en fonction des autres ensembles Premier on abrégera Premier(X) en P(X) Résoudre les équations ensemblistes pour trouver ces ensembles en remplaçant les ensembles connus dans les équations si cela ne suffit pas, réfléchir!

Exemple Non-terminaux : S E T F Terminaux : '+' '-' ' ' '*' '(' ')' 'id' 'n' '$' Productions : S ::= E '$' E ::= E '+' T '-' T T T ::= T ' ' F '*' F F F ::= 'id' 'n' '(' E ')' Premier(S) : P(E) Premier(E) : '-',P(T) Premier(T) : '*',P(F) Premier(F) : 'id','n','(' Premier(T) : '*','id','n','(' Premier(E) : '-','*','id','n','(' Premier(S) : '-','*','id','n','('

Exemple Non-terminaux : S X Y Terminaux : 'a' 'c' 'd' Productions : S ::= X Y S 'd' Y ::= 'c' ε X ::= Y 'a' Annulable = {X,Y} Premier(S) : P(X),P(Y),'d' Premier(Y) : 'c' Premier(X) : P(Y),'a' Premier(X) : 'c','a' Premier(S) : 'c','a','d'

Exemple Non-terminaux : S Y Terminaux : 'c' 'd' Productions : S ::= Y 'd' ε Y ::= S 'c' ε Annulable = {S,Y} Premier(S) : P(Y),'d' Premier(Y) : P(S),'c' En réfléchissant : Premier(S)={'c','d'} Premier(Y)={'c','d'}

La fonction Suivant La fonction Suivant associe à un non-terminal, les terminaux qui peuvent apparaître après ce non-terminal dans une suite de dérivations issues du start : b Suivant(X) si S γxbδ γ et δ sont des suites de non-terminaux et de terminaux, éventuellement vides

La fonction Suivant Non-terminaux : S E T F Terminaux : '+' '-' ' ' ' ' '(' ')' 'id' 'n' '$' Productions : S ::= E '$' E ::= E '+' T E '-' T T T ::= T ' ' F T ' ' F F F ::= 'n' 'id' '(' E ')' Suivant(E)={+,-,),$} Suivant(T)={,,+,-,),$} Suivant(F)={,,+,-,),$}

Propriétés de Suivant Propriétés : 1)Si A ::= γ X 'a' δ alors 'a' est dans Suivant(X) 2)Si A ::= γ X Y δ alors Premier(Y) est dans Suivant(X) 3)Si Y ::= γ X alors Suivant(X) contient Suivant(Y) 4)Si A ::= γ X Z 1 Z 2 Z n 'a' δ et que tous les Z i sont annulables alors 'a' est dans Suivant(X) (ainsi que les Premier(Z i )) 5)Si A ::= γ X Z 1 Z 2 Z n Y δ et que tous les Z i sont annulables alors Premier(Y) est dans Suivant(X) (ainsi que les Premier(Z i )) 6)Si Y ::= γ X Z 1 Z 2 Z n et que tous les Z i sont annulables alors Suivant(X) contient Suivant(Y) (ainsi que les Premier(Z i ))

Propriétés de Suivant Remarques 1)Les productions qui donnent des informations sur X sont celles dont le membre droit contient X, pour chaque occurrence de X 2)La production E ::= γ E enseigne que Suivant(E) contient Suivant(E), ce que l'on savait déjà

Calcul de Suivant Calculer Annulable et Premier Pour chaque non-terminal E, appliquer les propriétés à chaque occurrence de E dans les membres droits des productions on abrégera Suivant(X) en S(X) : regarder ce qui suit : si c'est un terminal 'x', ajouter 'x' à Suivant(E) si c'est un non-terminal Y, ajouter P(Y) à Suivant(E) si Y est annulable, reprendre à partir de ce qui suit Y là si rien ne suit, ajouter S(A) à Suivant(E), où A est le membre gauche de la production Résoudre les inéquations ensemblistes.

Exemple Non-terminaux : S E T F Terminaux : '+' '-' ' ' ' ' '(' ')' 'id' 'n' '$' Productions : S ::= E '$' E ::= E '+' T E '-' T T T ::= T ' ' F T ' ' F F F ::= 'n' 'id' '(' E ')' Suivant(E) : '$','+','-',')' Suivant(T) : S(E),' ',' ' Suivant(F) : S(T) Suivant(T)='+','-',')','$',' ',' ' Suivant(F)='+','-',')','$',' ',' '

Exemple Non-terminaux : S X Y Terminaux : 'a' 'c' 'd' Productions : S ::= X Y S 'd' Y ::= 'c' ε X ::= Y 'a' Annulable = {X,Y} Premier(Y) : 'c' Premier(X) : 'c','a' Premier(S) : 'c','a','d' Suivant(S) : vide Suivant(Y) : P(S),S(S),S(X) Suivant(X) : P(Y),P(S),S(S) Suivant(X) : 'c','a','d' Suivant(Y) : 'c','a','d'

Exemple Non-terminaux : S E O F Terminaux : '+' '-' 'n' '(' ')' Productions : S ::= E '$' E ::= E O E F O ::= '+' '-' ε F ::= 'n' '(' E ')' Annulable={O} Premier(O)={+,-} Premier(E)={n,(} Suivant(S) : vide Suivant(E) : P(O),P(E),')' Suivant(O) : P(E) Suivant(F) : S(E) Suivant(O) : 'id','n','(' Suivant(E) : '+','-','n','(',')' Suivant(F) : '+','-','n','(',')'

Exercice Non-terminaux : S E E2 T T2 F Terminaux : '$' '+' '-' ' ' ' ' '(' ')' 'id' 'n' Productions : S ::= E '$' E ::= T E2 E2 ::= '+' T E2 '-' T E2 ε T ::= F T2 T2 ::= ' ' F T2 ' ' F T2 ε F ::= 'n' 'id' '('E')' Annulable Premier Suivant S P(E) E P(T) ) $ E2 oui + - S(E) T P(F) P(E2),S(E2),S(E) T2 oui S(T) F ( id n P(T2),S(T2),S(T)

Exercice Non-terminaux : S E E2 T T2 F Terminaux : '$' '+' '-' ' ' ' ' '(' ')' 'id' 'n' Productions : S ::= E '$' E ::= T E2 E2 ::= '+' T E2 '-' T E2 ε T ::= F T2 T2 ::= ' ' F T2 ' ' F T2 ε F ::= 'n' 'id' '('E')' Annulable Premier Suivant S ( id n E ( id n ) $ E2 oui + - ) $ T ( id n ) + - $ T2 oui ) + - $ F ( id n ) + - $

Extensions On peut étendre Premier et Annulable (pas Suivant) aux suite de terminaux et non-terminaux : γ est annulable si elle ne contient que des non terminaux annulables Premier('a'γ) = { a } Si Z est annulable, Premier(Zγ) = P(Z) + Premier(γ) Si A n'est pas annulable, Premier(Aγ) = P(A)

Exemple Non-terminaux : S E O F Terminaux : '+' '-' 'n' '(' ')' Productions : Premier(OE) : '+','-','n','(' S ::= E '$' E ::= E O E F O ::= '+' '-' ε F ::= 'n' '(' E ')'

Notion de lookahead Lors de l analyse du code, on lira un certain nombre de lexèmes (en général un) à l avance, par rapport à ce que l on a déjà analysé Ces lexèmes constituent le lookahead Les algorithmes agissent en fonction des valeurs de ces lookahead

Grammaire augmentée Pour effectuer le parsing, il faut spécifier aux algorithmes quand arrive la fin du fichier : on ajoute un terminal spécial (en général '$') qui sera envoyé par le lexer un fois la fin du fichier atteinte en plus des actions usuelles, ce terminal est utilisé par les algorithmes pour savoir quand le parsing est terminé Pour cela, on augmente les grammaires : On ajoute un nouveau start, et un nouvel terminal '$' On ajoute la production nouveaustart ::= ancienstart '$'

Exemple Non-terminaux : S X Y Start : S Terminaux : 'a' 'c' 'd' Productions : S ::= X Y S 'd' Y ::= 'c' ε X ::= Y 'a' Non-terminaux : R S X Y Start : R Terminaux : 'a' 'c' 'd' '$' Productions : R ::= S '$' S ::= X Y S 'd' Y ::= 'c' ε X ::= Y 'a'