Abdelkader Heni ahe@info.fundp.ac.be FUNDP 2009-2010 Syntaxe et sémantique Abdelkader Heni ahe@info.fundp.ac.be FUNDP 2009-2010.

Slides:



Advertisements
Présentations similaires
Explorer un espace d’états
Advertisements

9 octobre 2007Cours de compilation 5 - Intranet1 Cours de compilation Techniques danalyse ascendantes.
24 septembre 2007Cours de compilation 4 - Intranet1 Cours de compilation Techniques danalyse descendantes.
Chap 1 Grammaires et dérivations.
Automate asynchrone.
Expressions rationnelles
Chapitre 1 Automates finis
IFT313 Introduction aux langages formels
Chapitre IV. Structures linéaires (piles, files, listes chaînées)
Conception et analyse des algorithmes
IFT313 Introduction aux langages formels
Analyse  Syntactique (Compilers, Principles, Techniques and Tools, Aho, Sethi et Ullman, 1986)
Démarche de résolution de problèmes
Algorithmes Branch & Bound
Analyse lexicale Généralités Expressions rationnelles Automates finis
IFT313 Introduction aux langages formels Froduald Kabanza Département dinformatique Université de Sherbrooke planiart.usherbrooke.ca/kabanza/cours/ift313.
IFT451 Introduction aux langages formels Froduald Kabanza Département dinformatique Université de Sherbrooke planiart.usherbrooke.ca/kabanza/cours/ift313.
IFT313 Introduction aux langages formels
Programmation linéaire
Notions de base de la théorie des langages
Programmation fonctionnelle Le langage LISP
4 - Les automates et les lexiques morphologiques : le contenu mot fléchilemmepartie du discourstraits de flexion Habituellement, un lexique morphologique.
I.A. Session 2009/2010 E.P.S.I. Bordeaux – C.S.I.I – 2 ème Année – Cours n°3.
Bases de données lexicales
LES ARBRES IUP 2 Génie Informatique
Structures de données IFT-2000
Inéquations du 1er degré
IFT313 Introduction aux langages formels Froduald Kabanza Département dinformatique Université de Sherbrooke Révision de mi-session.
IFT313 Révision finale Département d’informatique
IFT313 Introduction aux langages formels
IFT313 Introduction aux langages formels Froduald Kabanza Département dinformatique Université de Sherbrooke planiart.usherbrooke.ca/kabanza/cours/ift313.
IFT313 Introduction aux langages formels
IFT313 Introduction aux langages formels Froduald Kabanza Département dinformatique Université de Sherbrooke Automates à pile LR Notion de poignée.
Rappels de logique des prédicats du 1er ordre
Expressions régulières et hash tables
Périodicité, Apériodicité, Universalité et autres petits problèmes…
Chapitre 3 Machines de Turing.
IFT Complexité et NP-complétude
1 CSI3525: Concepts des Languages de Programmation Notes # 3: Description Syntaxique des Languages.
Chapitre 7: Le théorème de Kleene
Hiver 2003SEG2501 analyse lexicale1 Notes supplémentaires au sujet de lanalyse lexicale Exemples Dérivation dun NFA qui accepte le même langage (algorithme:
Traduction dirigée par la syntaxe
Applications des langages hors-contextes Les analyseurs syntactiques ascendants GNU Yacc et Bison.
Chapitre 3 Syntaxe et sémantique.
Analyse lexicale et syntaxique
Partie II Sémantique.
Rappel Modèle analyse-synthèse de la compilation
Indécidabilité.
8INF8061 Conception et analyse des algorithmes Comment comparer deux problèmes?
Structures de données IFT-2000 Abder Alikacem La récursivité Département d’informatique et de génie logiciel Édition Septembre 2009.
IFT Complexité et NP-complétude Chapitre 0 Rappels.
Programmation procédurale Transformations
Expressions régulières et hash tables
Paradigmes des Langages de Programmation
Les machines de Turing Lionel Blavy Sébastien Giraud Fabien Tricoire
Programmation linéaire en nombres entiers
Méthodes de tri.
Arbres binaires et tables de hachage
D.E ZEGOUR Ecole Supérieure d’Informatique. Problèmes de décision Concepts de base Expressions régulières Notation particulière pour exprimer certaines.
Exploration systématique de graphes
IFT313 Introduction aux langage formels
Recherche par automates finis
Chap 1 Grammaires et dérivations.
Chap 2. L'analyse descendante
Systèmes formels 1. Définition d'un SF Morphologie Théorie propre
Résolution des équations différentielles
Les analyseurs Bottom-up Pr ZEGOUR DJAMEL EDDINE Ecole Supérieure d’Informatique (ESI)
Chap. 3 Récursion et induction. Les définitions par récurrence consistent à construire des objets finis, à partir d'autres, selon certaines règles. Les.
Cours de Systèmes de Gestion de Données - Licence MIAGE – 2003/20041 Cours n°2 La conception d ’un schéma relationnel (suite) Chantal Reynaud Université.
Cycle, Cocycle, Arbre et Arborescence
Transcription de la présentation:

Abdelkader Heni ahe@info.fundp.ac.be FUNDP 2009-2010 Syntaxe et sémantique Abdelkader Heni ahe@info.fundp.ac.be FUNDP 2009-2010

I. Expressions régulières, langages et automates

Langages réguliers Soit ∑ un alphabet (fini). ∅ est un langage régulier ; {є} est un langage régulier ;  a ∈ ∑ , {a} est un langage régulier ; Si L1 et L2 sont réguliers, alors : L1 · L2 = {w1w2 | w1 ∈ L1 , w2 ∈ L2} est régulier ; L1 ∪ L2 est régulier. L∗ = {є} ∪ {wwww · · ·w | w ∈ L} est régulier ;

Langages réguliers Théorème de Kleene : Un langage est régulier si et seulement s’il est reconnu par un automate fini Lemme de pompage (pour les langages réguliers) Soit L un langage sur un alphabet ∑. Si L est régulier alors  p ∈ N :  w∈ L, |w|  p   x,y,z ∈ ∑* : 1- w = xyz 2- |y|  1 3- |xy|  p 4-  i ∈ N , x yi z ∈ L

Algorithme de déterminisation (D. pp140-141) Donnée : un AFN Résultat : un AFD acceptant le même langage Principe: Construire une table de transition Dtran comme suit: 1 - q0 = є-fermeture(e0) est le seul état de l’AFD 2 - Tant qu’il y a des transitions manquantes dans Dtran pour chaque état q et pour chaque symbole a faire * q’ := є-fermeture( Transiter(q, a) ) * Dtran [q, a ] := q’ * Ajouter q’ à la liste des états s’il n y est pas déjà

Algorithme de minimisation (D. p 160) Donnée : un AFD M Résultat : un AFD minimal M’ acceptant le même langage que M Principe: 1. Initialisation :  = { F , E \ F } 2. Répéter - Partitionner chaque groupe G de  en sous groupes S1 ,S2, .. de manière que : q, q’ ∈ Si   a , q et q’ ont des transitions sur a vers des états d’un même groupe de  - Remplacer G par S1 ,S2, .. Jusqu’à ce que  devienne stationnaire 3- Chaque groupe de  est un état de M’ 4- L’état initial de M’ est le groupe de  qui contient l’état initial de M 5- G G’ ssi  q ∈ G,  q’ ∈ G’ : q q’ a a

II. Analyse descendante LL(k)

Automate à pile AP = un automate a nombre fini d’états classique + une pile non bornée Automate - Ensemble d'états Q - État initial q0 - Ensemble d'états finaux F - Alphabet d'entrée ∑ Pile : Alphabet Z

Grammaire non contextuelle Définition : Une grammaire est dite non contextuelle si chaque production est de la forme X  X  VN  (VN  VT) *

Grammaire régulière Définition Grammaires non contextuelles Définition Une grammaire est dite régulière si chaque production est de la forme X  X Y ou X  ou X  X Y ou X    VT* X  VN Si G est régulière alors L(G) est régulier. Il existe des grammaires non régulières qui engendrent un langage régulier. grammaire pas régulière  langage pas régulier Grammaires régulières

Grammaire ambiguë Une grammaire est ambiguë s’il existe un mot qui admet deux arbres syntaxiques pour une grammaire donnée Décider de l'ambiguïté d'une grammaire est difficile : c'est un problème indécidable.

X 1|2 | … | n | 1 |2 |…. | m Factorisation gauche Remplacer : X 1|2 | … | n | 1 |2 |…. | m Par X X’ | 1 |2 |…. | m X’ 1|2 | … | n |

Suppression de la récursivité gauche Remplacer : X X1|X2 | … | Xn | 1 | 2 |…. | m Par X 1 X’ | 2 X’| …. | mX’ X’ 1X’| 2X’ | … | nX’ | 

Transitions de l’automate des items Soit G = (VT , VN, S, P) une grammaire non contextuelle. Les transitions de son automate des items sont : Si le sommet de pile est [X → α • Y β] et que la production Y → γ appartient à la grammaire, remplacer le sommet de pile par [X → α • Y β][Y → •γ] (Expansion) ; Si le sommet de pile est [X → α • aβ] et que le symbole sous la tête de lecture est a, remplacer le sommet de pile par [X → αa • β] et avancer la tête de lecture (Lecture) ; Si la partie supérieure de pile est [X → α • Y β][Y → γ•] alors la remplacer par [X → αY • β] (Réduction).

Définition : ε-productif PremierK Définition : ε-productif Un non terminal X  VN est dit ε-productif si X ⇒∗ ε Ensemble Premier1 (α) ? α Premier (α) α = ε  α = a ou α = aβ , a  VT a α = X , X  VN {Premier (ϒi) |X → ϒi  P} α = Xβ , X  VN , X est ε-productif premier (X)  Premier (β) α = Xβ , X  VN , X n’est pas ε-productif Premier (X)

Problèmes : Comment choisir entre X  αβ et X   ? ( Premier() =  ) Si la tête de lecture est $ ? Quelle production choisir ?

SuivantK Calcul de suivant.  Les ensembles Premier ne suffisent pas. On a besoin des ensembles SuivantK. Calcul de suivant. Pour l’axiome S on ajoute { $ } à Suivant(S) Suivant (X) =  Suivant (X) dans toutes les productions P Suivant(X) Y = αX Suivant(Y) Y = αX β, β n’est pas ε-productif Premier (β) Y = αX β, β est ε-productif Premier (β)  Suivant(Y)

Table d’analyse LL(1) Algorithme : Entree : une grammaire G, Premier et Suivant Sortie : la table d'analyse TAB Méthode 1) pour toute production X  β faire a) Ajouter X  β à TAB[ X, a ] pour tout a  Premier(β) b) Si β est ε-productif alors Ajouter X  β à TAB[ X, b ] pour tout b  Suivant(X) 2) Ajouter erreur dans les entrées de TAB restées vides

- Soit Premier( )  Premier(β)   Une grammaire est LL(1) si Chaque case de la table d’analyse contient une seule production ou erreur. Une grammaire n'est pas LL(1) s'il existe 2 productions X   et X  β telles que : - Soit Premier( )  Premier(β)   - Soient  est ε-productif et Premier(β)  Suivant(X)   - Soit  et β sont tous les deux ε-productifs (la grammaire est ambiguë).

Suppression de la récursivité générale On ordonne les non-terminaux : X1,X2, . . . ,Xn On applique l’algorithme suivant Algorithme : Pour i allant de 1 à n faire   1) Pour j allant de 1 à  (i - 1)  faire     On remplace la règle Xi Xj     où  Xj  β1 | . . . | βk              par la règle Xi   β1  | . . . | βk        2) On  élimine la récursivité à gauche immédiate pour toutes les règles de Xi. Remarque : Cet algorithme n'est efficace que si la grammaire est propre

Exercices 1) Qu’est ce qu’une grammaire LL(0) ? 2) Montrer que la grammaire suivante n’est pas LL(k) pour tout k S  aBb | Bac B  aB | d

III. Analyse LR(0), SLR(1), LALR(1), LR(1)

Automate LR(0) : Relation de transition La relation de transition de l'automate LR(0) est telle que : Lecture : - si a est sous la tête de lecture ; - si q est en sommet de pile ; - et l'un des items de q est de la forme [X  ….●a…. ] ; alors on empile l'état successeur de q pour a. Réduction : - si q est en sommet de pile - si l'un des items de q est de la forme [X  α● ] ; | α | = n Alors on dépile n états puis on empile δ(q,X) le successeur par X de l'état q en sommet de pile.

Table d'un analyseur LR(0) Table des actions/goto : Q x (VT  {$}) ---> ensemble d'actions Q x VN ----> Destinations indique quelle action effectuer dans un état q  Q si x  (VT  {$}) est sous la tête de lecture et à quel état revenir s’il s’agit d’une réduction . Trois types d’actions possibles : - Lecture du terminal x - Réduction par une production p (red par p) ; - Acceptation Actions Goto États a b c $ A B 1 2 3

Table des Actions/Goto LR(0) 1)  a  VT et q  Q : si δ(q, a) = q’ alors mettre Shiftq’ dans T[q,a] 2)  q  Q, q  qf : si q contient un item terminal de la forme X  α● , alors  a  ( VT  {$} ) mettre ReduceM dans T[q,a] (M est le numéro de la règle X  α ) 3) Mettre acceptation dans la case (qf , $) 4) Mettre erreur dans les cases encore vides Goto Pour tout A  VN et q  Q : si δ(q, A) = q’ alors mettre q’ dans T[q,A]

Conflits LR(0) L'automate LR(0) construit peut ne pas être déterministe : État autorisant 2 réductions (ou plus) : conflit LR(0) reduce/reduce X  α● Y  β● État autorisant 1 réduction et 1 lecture (ou plus) : conflit LR(0) shift/reduce X  …●a… Y  α● Une grammaire est dite LR(0) si aucun de ses états ne contient de conflit LR(0).

Comment résoudre les conflits LR(0) ? Solution : essayer avec SLR(1) SLR(1) prend en compte un symbole de prévision a pour décider d'une réduction : Reduce X  α ssi a  Suivant(X)

Table des Actions/Goto SLR(1) 1)  a  VT et q  Q : si δ(q, a) = q’ alors mettre Shiftq’ dans T[q,a] 2)  q  Q, q  qf : si q contient un item terminal de la forme X  α● , alors  a  ( VT  {$} ) et a  Suivant(X) mettre Reduce X  α dans T[q,a] 3) Mettre acceptation dans la case (qf , $) 4) Mettre erreur dans les cases encore vides Goto Pour tout A  VN et q  Q : si δ(q, A) = q’ alors mettre q’ dans dans T[q,A]

Conflits SLR(1) État autorisant 2 réductions (ou plus) : conflit SLR(1) reduce/reduce X  α● Y  β● et suivant (X)  suivant (Y)   État autorisant 1 réduction et 1 lecture (ou plus) : conflit SLR(1) shift/reduce X  …●a… Y  α● et a  suivant (Y) Une grammaire est dite SLR(1) si aucun de ses états ne contient de conflit SLR(1).  Essayons avec LALR(1)… ... mais avant, on va voir LR(1)

Automate LR(1) 1- On commence par calculer I0 = fermeture (S’ ● S, $) 2- On calcule les Ij = δ(I0, X)  X  ( VT  VN) 3- On répète l’étape 2 pour chaque ensemble Ij Fermeture (I) Répéter pour tout item [ X  α● B β, a ] de I, pour chaque production B  γ de G’ et chaque terminal b de premier( β a) Ajouter [ B  ● γ, b ] à I Jusqu’à ce qu’aucun nouvel élément ne puisse être ajouté à I

Table des Actions/Goto LR(1) 1)  a  VT et q  Q : si δ(q, a) = q’ alors mettre Shiftq’ dans T[q,a] 2)  q  Q, q  qf : si q contient un item de la forme [ X  α●, a ] , alors  a  VT mettre ReduceM dans T[q,a] 3) Mettre acceptation dans la case (qf , $) 4) Mettre erreur dans les cases encore vides Goto Pour tout A  VN et q  Q : si δ(q, A) = q’ alors mettre q’ dans T[q,A]

Conflits LR(1) État autorisant 2 réductions (ou plus) : conflit LR(1) reduce/reduce X  α● U Y  β● U’ et U  U’   État autorisant 1 réduction et 1 lecture (ou plus) : conflit LR(1) shift/reduce X  …●a… U Y  α● U’ et a  U’ Une grammaire est dite LR(1) si aucun de ses états ne contient de conflit LR(1).

LALR(1) 1. À partir de l’automate LR(1)…. 1- Construire la collection des ensembles d’items LR(1) pour G’ 2- Pour chaque cœur présent parmi les items LR(1), trouver tous les états ayant ce même cœur et remplacer ces états par leur union 3- Construire la table en utilisant le même algorithme que pour LR(1)

LALR(1) 2. Sans passer par l’automate LR(1) 1- On construit l’automate SLR(1) 2- On calcule les symboles de prévision comme suit: - SP (S’ ●S ) = { $ } - SPq’(X α A ● β ) =  SPq (X α ● A β ) Tel que δ(q, A) = q’ - SPq(X ● α ) =  SPq (Y β●X ) Tel que Y β●X  q  premier (θ) \ ε Tels que Y β●X θ  q et θ ε  SPq (Y β●X θ) Tels que Y β●X θ  q , θ ε et ε  premier(θ)

Exercice 18 E0 E3 S’→ ●S $ S → ●nASA S → ●s S’→ ●S $ S → ●nASA $ A → ●aB n,s n a a a E1 a S’→ S● S → nAS●A $ A → ●aB $ S E5 E6 A → a●B n,s B → ●aAB B → ● $ a $ a E8 $ a a n,s a a n,s a $ a B→ a●AB n,s A→ ●aB $ $ a a B A A a E7 E9 E10 A → aB● n,s S → nASA● $ a B → aA●B n,s,$,a B → ●aAB n,s,$,a B → ● n,s,$,a B E11 B → aAB● n,s,$,a

Conflits LALR(1) État autorisant 2 réductions (ou plus) : conflit LALR(1) reduce/reduce X  α● U Y  β● U’ et U  U’   État autorisant 1 réduction et 1 lecture (ou plus) : conflit LALR(1) shift/reduce X  …●a… U Y  α● U’ et a  U’ Une grammaire est dite LALR(1) si aucun de ses états ne contient de conflit LALR(1).

Langages non contextuels Lemme de pompage (pour les langages non contextuels) Soit L un langage sur un alphabet ∑. Si L est non contextuel alors  p ∈ N :  M∈ L, |M|  p   x,y,z,v,w ∈ ∑* : 1- M = x.v.y.w.z 2- |vw|  1 3- |vyw|  p 4-  i ∈ N , x viywiz ∈ L

IV. Grammaires attribuées

Grammaires attribuées On enrichit donc les grammaires BNF par deux concepts: Les données sont représentes par des attributs associés aux terminaux et non-terminaux ; Les calculs des données sont exprimes sous la forme de règles sémantiques associées aux productions. On obtient une grammaire décorée appelée grammaire attribuée.

Remarque: Une GA spécifie comment calculer des valeurs associées a ses symboles mais elle ne dit pas quand effectuer ces calculs ni dans quel ordre effectuer les actions. GA = formalisme de spécification, pas d'exécution

Attributs synthétisés L'attribut X.a est synthétisé si X apparaît en partie gauche la valeur de X.a est calculée en fonction de la valeur d'attributs associés a des symboles apparaissant en partie droite. X  X1 X2 ….Xn { X.a = f(X1.x1, X2.x2,…. ,Xn.x1 }

Attributs hérités L'attribut Y.a est hérite si Y apparaît en partie droite La valeur de Y.a est calculée en fonction de la valeur d'attributs associés a des symboles apparaissant en partie gauche et/ou des autres symboles apparaissant en partie droite. X  X1 X2 … Y….Xn { Y.a = f(X.x, X1.x1, X2.x2,…. ,Xn.x1 }

Grammaire S-attribuée Une grammaire attribuée ne comportant que des attributs synthétisés est dite S-attribuée. Grammaire L-attribuée X  X1 X2 ….Xn Les attributs hérités de Xi (1  i  n) dépendent uniquement de la valeur : d'attributs hérités du père X ; d'attributs des frères Xj , avec ji

Restrictions sur les GA Analyse descendante : parcours de l'arbre en ordre préfixe, en profondeur d'abord: Les attributs hérités de X2 ne peuvent venir de ses frères de droite

Restrictions sur les GA Analyse ascendante : parcours de l'arbre en ordre postfixe Les attributs hérités de X2 ne peuvent venir de ses frères de droite, ni de son père