Grammaires Génératives et Automates Associés 1 Langage généré
Transcription
Grammaires Génératives et Automates Associés 1 Langage généré
Automate & Grammaires polytech’ grenoble/ricm3 chapître Grammaires Génératives et Automates Associés 4 Les automates décrivent un procédé de reconnaissance d’un langage. Les grammaires génératives donnent une autre façon de définir un langage. Une grammaire définit comment générer des mots (ou phrases) qui appartiennent à un langage. Nous verrons que pour certains typdes de grammaire (type 2 et type 3) on sait associer à une grammaire un automte qui reconnaît exactement le langage généré par la grammaire. Ainsi les grammaires offrent une façon lisible de décrire un langage et les automates déterministes donnent une façon efficace de reconnaître les mots du langage. À l’origine la notion de grammaire a été inventé par des linguistes On peut définir la grammaire du français qui indiquent les phrases syntaxiquement correctes du français ; on ne s’occupe pas ici du sens de la phrase mais uniquement de la structure. Exemple : Le soleil a quatre pattes est une phrase syntaxiquement correcte. soleil quatre a le pattes est syntaxiquement incorrecte De la même manière on peut décrire les programmes syntaxiquement corrects d’un langage de programmation ; on ne s’occupe pas ici du sens, ni de la terminaison, ni du bon fonctionnement du programme. Exemple : int main(){ int x = 1/0 } est un programme syntaxiquement correct. mint aint)( 1/x = int 0{} n’est pas syntaxiquement correct. Définition Une grammaire G = (Σ, N , R) est définie par 1. Σ, l’alphabet sur lequel seront écrit les mots du langage 2. N , l’alphabet des symboles non terminaux utilisés pour définir les règles de la grammaire mais qui ne subsisteront pas dans les mots du langage 3. S ∈ N le germe de la grammaire (seed en anglais) 4. R un ensemble de règles de réécriture de la forme w → w0 où w et w0 sont des mots de (Σ ∪ N )∗ Exemple : La grammaire G = Σ = { a}, N = { S }, R = { S → , S → a.S } génère les mots du langage L (a∗ ) 1 Langage généré par une grammaire Les automates sont utilisés pour reconnaître les mots d’un langage. Pour étudier les inombrables langages irréguliers, on peut adopter le point de vue dual et classer les langages en fonction du type de grammaire qui permet de les générer. Dérivation Les règles R d’une grammaire G permettent de dériver le mot m0 à partir du mot m, ce que l’on note m `R m0 , si les mots m et m0 peuvent se décomposer en trois parties : un début d, une fin f et deux mots w et w0 tels que d.w.f | {z } m `R |{z} se réécrit en d.w0 .f pour une règle w → w0 ∈ R | {z } m0 Définition : langage généré par une grammaire Le langage d’une grammaire G = (Σ, N , S, R) est l’ensemble des mots de Σ∗ (c’est-à-dire ne contenant plus de symboles non terminaux de N ) qui sont dérivés à partir du germe S en un nombre quelconque d’étape de dérivation (ce que l’on note `∗R ). def L (G) = {w ∈ Σ∗ | S `∗R w } M.Périn Université Grenoble-Alpes 1 Automate & Grammaires 2 2.1 polytech’ grenoble/ricm3 Classification (de Chomsky) des grammaires Grammaires de type 3, dites régulières La littérature sur le sujet a inventé de nombreux termes équivalents pour les grammaires de type 3 : régulières, rationnelles, regular en anglais. Une grammaire est de type 3 si ses règles R sont de la forme : w → w0 avec w ∈ N et w0 ∈ Σ∗ ∪ Σ∗ .N Autrement dit, on a uniquement droit aux règles de la forme : N →w avec N, N 0 ∈ N et w ∈ Σ∗ , c’est-à-dire que w N → w.N 0 est le mot ou bien un mot composé de symboles N → de l’alphabet Σ. N → N0 Résultat Les langages définis par les grammaires de type 3 sont les langages réguliers. On a donc l’équivalence : grammaires de type 3 ≡ langages réguliers/rationnels ≡ adef preuve : On donne une série de transformation qui permmettent de passer d’un adef à une grammaire de type 3 et réciproquement : mise en équation résolution adef −−−−− −−−−−−→ équations de langages (≡ Grammaire de type 3) −−− −−−−→ Arden Arden construction déterminisation expressions régulières −−T−hompson −−−−−→ andef −−−−−−−−−−→ adef Exemple G = (Σ = {a, b}, N = { L1 , L2 }, S = L1 , R) avec : La grammaire L1 → a b L1 → a.L1 def b / L1 → b.L2 R= génère le langage reconnu par l’automate / 1 2 L2 → L2 → b.L2 où Li définit le langage reconnu par l’état i de l’automate Implantation de la reconnaissance des mots de L (G) L’outil lex détecte les parties de grammaires qui sont de type 3 et produit un automate (à nombre) d’états fini déterministe qui reconnaît de manière efficace les mots du langage définis par cette sous-partie de la grammaire. 2.2 Grammaires de type 2, dites sans contexte La littérature sur le sujet a inventé de nombreux termes équivalents pour les grammaires de type 2 : non contextuelle sans contexte, hors contexte, algébriques, context-free en anglais. Une grammaire est de type 2 si ses règles R sont de la forme : w → w0 avec w ∈ N et w0 ∈ (Σ ∪ N )∗ Autrement dit, on a uniquement droit à des règles sans contexte, c’est-à-dire de la forme : N → N → w0 avec N ∈ N un mot formé de lettres de Σ et de symboles non terminaux N1 , ...., Nk ∈ N Exemple : La grammaire G = (Σ = { a, b}, N = {S }, S, R = { S → , S → aSb}) génère le langage { an bn | n ∈ } N M.Périn Université Grenoble-Alpes 2 Automate & Grammaires polytech’ grenoble/ricm3 Résultat Les langages définis par les grammaires de type 2 sont les langages reconnaissables par un automate non déterministe à une pile (aupnd). On a donc l’équivalence : grammaires de type 2 ≡ langages algébriques/hors contexte ≡ aupnd justification : Pour montrer cette équivalence il faut donner un procédé qui permet de construire un aupnd qui reconnaît le langage généré par une grammaire G et inversement donner un procédé qui permet de construire la grammaire G qui génère le langage reconnu par un aupnd. Ces deux procédés sont brièvement décrits ci-après et seront approfondis en TD. Voir le cours sur les automates à une pile Implantation de la reconnaissance des mots de L (G) Les outils yacc et antlr détectent les parties de grammaires qui sont de type 2 et produisent un automate à une pile déterministe qui reconnaît (de manière efficace) les mots du langage définis par cette sous-partie de la grammaire. Les parties de type 3 sont traités par lex. Si la grammaire n’est pas déterministe ou n’est pas de type 2, on ne sait pas produire d’automate déterministe qui reconnaît cette grammaire. Les outils yacc et antlr le signalent les règles incriminées. 2.3 Grammaires de types 1, dites contextuelles Les règles de production de la grammaire sont — soit de la forme S → , — soit de la forme α → β avec α, β ∈ (Σ ∪ N )∗ avec |α| ≤ |β|. Autrement dit α et β sont formés de symboles de l’alphabet Σ et de non-terminaux de N et la partie droite (β) est plus longue que la partie gauche (α). Remarque D’après la définition la taille du mot ne peut pas diminuer lorsqu’on applique une règle de production. Puissance d’expression : Les grammaires de type 1 permettent de coder toutes les fonctions primitives récursives (celles qui terminent toujours). Exercice (en TD) Complétez la grammaire de type 1 qui génère les langages {an bn cn | n ∈ 2.4 N }. Grammaires de type 0 appelées systèmes de réécriture libre Les règles de production sont de la forme quelconque, c’est-à-dire de la forme α → β avec α, β ∈ (Σ ∪ N )∗ Remarque D’après cette définition la taille du mot peut croître ou décroitre lorsqu’on applique une règle de production. On parle alors de règles de réécriture libres : lorsqu’on reconnait le terme α dans un mot, on peut le réécrire (ie. le remplacer par) β et chercher d’autre endroit où appliquer une réécriture. Les règles s’appliquent dans n’importe quel ordre et éventuellement en parallèle à condition qu’elles agissent sur des parties distinctes du mot. Avec de tels systèmes de réécriture on peut coder n’importe quelle fonction calculable (c’est-à-dire n’importe quel algorithme informatique) et même les fonctions qui ne terminent pas toujours. M.Périn Université Grenoble-Alpes 3 Automate & Grammaires Exemple de 1) 3) 5) 10) 12) polytech’ grenoble/ricm3 système de réécriture qui génère le langage {an bn cn | n ∈ N} pschittt S → Ã.C̃ 2) S −−−−−→ − → − → − → − zippp → Ã → Ã.a 4) Ã −−−→ A 7) A .a → a. B . A − ← − ← −← − → − ← − foufff zappp ← C̃ → c.C̃ 6) C̃ −−−−→ C 8) c. C → C . B .c 9) A . C −−−→ → − → − → − → − tic tic’ B .a −−→ a. B 11) B .b −−→ b. B ← − tac ← − ← − tac’ ← − → − ← − wizzz c. B −−→ B .c 13) b. B −−−→ B .b 14) B . B −−−→ b Dérivation de a0 b0 c0 pschittt... z}|{ S ...pschittt → z}|{ = a0 b0 c0 Dérivation de a2 b2 c2 ...1 3... 5... ...3 ...5 4... 6... ...4 ...6 1... z}|{ z}|{ z}|{ z }| { z}|{ z }| { z}|{ z}|{ z }| { z}|{ → − ← − Ã .|{z} C̃ → Ã .a.c. C̃ → |{z} Ã .a.a.c.c.|{z} C̃ → Ã .a.a.c.c. C̃ → A .a.a.c.c. C S → |{z} | {z } | {z } | {z } | {z } | {z } | {z } 3... 5... ...3 3... ...5 5... ...3 ...5 7... 9... → − → − ← −← − → − → −→ − ← −← − ← − → − → − ← − ← − → − ← − → a. B .c} → a. B .a. B .c}. B .c → a.|{z} B .a. |B{z . B} .c. B .c → a.a. B . |{z} b .|{z} B .c .c | B {z. A}.a.c.|C .{z | B {z A}.|C .{z |{z} |{z} 7... 9... ...7 → − ← − → − ← − → a.a. B . |{z} b. B .c.c → a.a. B . |{z} B .b .c.c tac0 ... ...9 tic... wizzz... tac... ...tic ...wizzz ...tac ...tac0 → − ← − b .b.c.c = a.a.b.b.c.c = a2 b2 c2 → a.a. |B{z . B} .b.c.c → a.a. |{z} wizzz... M.Périn ...wizzz Université Grenoble-Alpes 4