Théorie des langages Grammaires Hors-Contexte Elise Bonzon http://web.mi.parisdescartes.fr/ bonzon/ elise.bonzon@parisdescartes.fr 1 / 31
Grammaires Hors-Contexte 1 Définitions 2 Grammaires réduites 3 Grammaires propres 4 Formes normales 2 / 31
Définitions Grammaires Hors-Contexte 1 Définitions 2 Grammaires réduites 3 Grammaires propres 4 Formes normales 3 / 31
Définitions Grammaire Hors-Contexte Grammaire Hors-Contexte ou algébrique Une grammaire G = V, Σ, P, S est hors-contexte (ou algébrique) si V est un alphabet Σ V est l ensemble des symboles terminaux V \ Σ est l ensemble des symboles non terminaux S V \ Σ est le symbole de départ P ((V \ Σ) V ) est l ensemble (fini) de règles de production 4 / 31
Définitions Grammaire Hors-Contexte Grammaire Hors-Contexte ou algébrique Une grammaire G = V, Σ, P, S est hors-contexte (ou algébrique) si V est un alphabet Σ V est l ensemble des symboles terminaux V \ Σ est l ensemble des symboles non terminaux S V \ Σ est le symbole de départ P ((V \ Σ) V ) est l ensemble (fini) de règles de production Langage algébrique Un langage L est algébrique s il existe une grammaire algébrique telle que L(G) = L 4 / 31
Définitions Grammaire Hors-Contexte Conséquence : Tout langage rationnel est algébrique. ATTENTION: la réciproque est fausse Un langage algébrique non rationnel n est pas reconnu par un automate fini n est pas décrit par une expression régulière il n existe pas de grammaire régulière pour l engendrer. 5 / 31
Définitions Rappel : hierarchie de Chomsky Type 0 Pas de restriction Type 1 Grammaires contextuelles (ou sensibles au contrôle) (Context-sensitive) α β, α β, α V + Type 2 Grammaires hors-contexte (Context-Free) A β Type 3 Grammaires régulières (ou linéaires à droite) A wb A, B V \ Σ non terminaux A w w Σ terminaux 6 / 31
Définitions Rappel : hierarchie de Chomsky T3 Réguliers Automate fini T2 Context Free Automate à pile T1 Context sensitive Machine de Turing T0 7 / 31
Définitions Grammaire hors contexte : exemple Soit G = V, Σ, P, S avec Σ = {a, b} V \ Σ = {S} Axiome S 3 règles de production : S asb S ɛ L(G) = {a n b n n 0} 8 / 31
Définitions Grammaire hors contexte : langage PASCAL instruction ɛ variable := expression begin liste-instructions end if expression then instruction if expression then instruction else instruction case expression of liste-case end while expression do instruction repeat instruction until expression for varid := liste-pour do instruction identificateur-procedure identificateur-procedure(liste-expressions) goto etiquette with liste-variables-record do instruction etiquette : instruction 9 / 31
Définitions Grammaire hors contexte : langage PASCAL instruction ɛ variable := expression begin liste-instructions end if expression then instruction if expression then instruction else instruction case expression of liste-case end while expression do instruction repeat instruction until expression for varid := liste-pour do instruction identificateur-procedure identificateur-procedure(liste-expressions) goto etiquette with liste-variables-record do instruction etiquette : instruction Symboles terminaux : begin, if, then, else, end, case, of, while... Les variables (ou symboles non terminaux) sont définies dans d autres règles Grammaire Pascal : plus de 300 règles 9 / 31
Définitions Analyse syntaxique Les langages de programmation sont des langages algébriques. Ils sont spécifiés par des grammaires algébriques Dans sa phase d analyse syntaxique, un compilateur teste si un programme est bien un élément du langage de programmation dans lequel il est écrit. Pour un programme donné, le compilateur essaie de reconstituer l arbre de dérivation (ou arbre syntaxique) de bas en haut en procédant par réductions successives : on parle alors d analyse ascendante. A l issue de cette phase, on sait si notre programme est syntaxiquement correct ou pas 10 / 31
Grammaires réduites Grammaires Hors-Contexte 1 Définitions 2 Grammaires réduites 3 Grammaires propres 4 Formes normales 11 / 31
Grammaires réduites Grammaires réduites Symbole non terminal utile Soit G = V, Σ, P, S. Un symbole non terminal X V \ Σ est Productif si L G (X ) Accessible s il existe des mots α, β tels que S G αx β Utile s il est productif, qu il existe des mots α, β tels que S αx β G et tels que α et β ne contiennent que des symboles non terminaux productifs. 12 / 31
Grammaires réduites Grammaires réduites Symbole non terminal utile Soit G = V, Σ, P, S. Un symbole non terminal X V \ Σ est Productif si L G (X ) Accessible s il existe des mots α, β tels que S G αx β Utile s il est productif, qu il existe des mots α, β tels que S αx β G et tels que α et β ne contiennent que des symboles non terminaux productifs. Grammaire réduite Une grammaire est réduite si tous ses symboles non terminaux sont utiles. 12 / 31
Grammaires réduites Grammaires réduites Symbole non terminal utile Soit G = V, Σ, P, S. Un symbole non terminal X V \ Σ est Productif si L G (X ) Accessible s il existe des mots α, β tels que S G αx β Utile s il est productif, qu il existe des mots α, β tels que S αx β G et tels que α et β ne contiennent que des symboles non terminaux productifs. Grammaire réduite Une grammaire est réduite si tous ses symboles non terminaux sont utiles. En supprimant les variables inutiles dans une grammaire, on ne change pas le langage engendré sauf si l axiome lui-même est inutile, c est-à-dire si la grammaire engendre le langage vide. 12 / 31
Grammaires réduites Algorithme de calcul des symboles non terminaux productifs 1. Calculer l ensemble V 0 des symboles non terminaux X pour lesquels il existe une règle X α, α Σ 2. Calculer l ensemble V i+1 formé de V i et des symboles non terminaux X pour lesquels il existe une règle X α, α (Σ V i ) 3. Arrêter lorsque V i+1 = V i. Cet ensemble est l ensemble des symboles non terminaux productifs. 13 / 31
Grammaires réduites Algorithme de calcul des symboles non terminaux accessibles 1. Poser W 0 = {S} 2. Calculer l ensemble W i+1 formé de W i et des symboles non terminaux X pour lesquels il existe une règle Y αx β, avec Y W i 3. Arrêter lorsque W i+1 = W i. Cet ensemble est l ensemble des symboles non terminaux accessibles. 14 / 31
Grammaires réduites Algorithme de réduction d une grammaire 1. Déterminer l ensemble des symboles non terminaux productifs 2. Supprimer les symboles non terminaux non productifs, ainsi que les règles dans lesquels ils figurent 3. Si l axiome S est improductif, la grammaire réduite a pour seul symbole non terminal S, et un ensemble de règles vide 4. Si l axiome S est productif, déterminer tous les symboles non terminaux accessibles à partir de S. Ceci permet d obtenir l ensemble des symboles non terminaux utiles. 5. Supprimer tous les autres symboles non terminaux, ainsi que les règles dans lesquelles ils figurent. La grammaire ainsi obtenue est réduite. 15 / 31
Grammaires réduites Algorithme de réduction d une grammaire : exemple On considère la grammaire ayant les règles suivantes : S a X X XY Y b Symboles non terminaux productifs : {S, Y }. X est donc improductif, on peut le supprimer On obtient la grammaire S a Y b L ensemble des symboles non terminaux accessibles est {S}. On supprime Y S a La grammaire est réduite. 16 / 31
Grammaires réduites Algorithme de réduction d une grammaire : exemple 2 On considère la grammaire ayant les règles suivantes : S XYZW X cx Y ab Z cya WSW W ɛ Symboles non terminaux productifs : {Y, Z, W }. S est donc improductif. La grammaire réduite a donc pour seul symbole non terminal S, et un ensemble de règles vide 17 / 31
Grammaires propres Grammaires Hors-Contexte 1 Définitions 2 Grammaires réduites 3 Grammaires propres 4 Formes normales 18 / 31
Grammaires propres Grammaires propres Une grammaire propre ne contient : Pas de règle unitaire (ou renommage): G ne contient pas de production de la forme A B, avec A, B V \ Σ (symboles non terminaux) Pas de ɛ-règle : G ne contient pas de règle du type A ɛ 19 / 31
Grammaires propres Grammaires propres Théorème Tout langage algébrique L = L \ {ɛ} peut être engendré par une grammaire propre. 20 / 31
Grammaires propres Grammaires propres Théorème Tout langage algébrique L = L \ {ɛ} peut être engendré par une grammaire propre. Un symbole non terminal X est annulable si X ɛ X est annulable si : Il existe une règle X ɛ, ou Il existe une règle X Y 1... Y n, avec Y 1,..., Y n des symboles non terminaux annulables 20 / 31
Grammaires propres Algorithme de calcul des symboles non terminaux annulables 1. Calculer l ensemble N 0 des symboles non terminaux X telles qu il existe une règle X ɛ 2. Calculer l ensemble N i+1 formé de N i et des symboles non terminaux X telles qu il existe une règle X α avec α N i 3. Arrêter lorsque N i+1 = N i. Cet ensemble est l ensemble des symboles non terminaux annulables. 21 / 31
Grammaires propres Algorithme d élimination des ɛ-règles 1. Calculer l ensemble N des symboles non terminaux annulables 2. Remplacer chaque règle X α par toutes les règles obtenues en remplaçant, de toutes les façons possibles, les occurrences de symboles non terminaux annulables par le mot vide. S il y a n occurrences de symboles non terminaux annulables dans α, cela donne 2 n règles. 3. Supprimer les ɛ-règles. La grammaire obtenue est équivalente à la grammaire de départ au mot vide près, et est sans ɛ-règle. 22 / 31
Grammaires propres Algorithme d élimination des ɛ-règles : exemple On considère la grammaire ayant les règles suivantes : S asbs ɛ Remplacer le symbole non terminal S par le mot vide de toutes les façons possibles dans asbs donne les 4 mots asbs, abs, asb et ab La grammaire propre obtenue est S asbs abs asb ab 23 / 31
Grammaires propres Algorithme d élimination des ɛ-règles : exemple 2 On considère la grammaire ayant les règles suivantes : S asb SS ɛ La première règle donne S asb et S ab La seconde règle donne S SS La règle S S générée deux fois par notre algorithme est inutile La grammaire propre obtenue est S asb ab SS 24 / 31
Grammaires propres Algorithme d élimination des règles unitaires 1. Calculer la relation définie par X Y ssi X Y 2. Calculer la relation définie par X Y ssi X Y et Y X 3. Choisir un symbole non terminal par classe d équivalence, et remplacer toutes les occurrences de toutes les symboles non terminaux équivalents par ce représentant. Supprimer toutes les règles unitaires entre symboles non terminaux équivalents. 4. En commançant par les symboles non terminaux qui sont minimaux dans l ordre, remplacer les règles unitaires X Y par toutes les règles X α, pour tous les α tels que Y α. La grammaire obtenue est sans règles unitaires. 25 / 31
Grammaires propres Algorithme d élimination des règlesunitaires : exemple On considère la grammaire des expressions arithmétiques ayant les règles suivantes : E E + T T T T F F F (E) a b c Il y a deux règles unitaires : E T et T F L ordre obtenu est E > T > F On considère les symboles non terminaux en commançant par celles qui sont minimales dans On substitue à T F les règles T (E) a b c On substitue à E T les règles E T F (E) a b c On obtient : E E + T T F (E) a b c T T F (E) a b c F (E) a b c 26 / 31
Formes normales Grammaires Hors-Contexte 1 Définitions 2 Grammaires réduites 3 Grammaires propres 4 Formes normales 27 / 31
Formes normales Forme normale de Chomsky Forme normale de Chomsky Une grammaire algébrique G = V, Σ, P, S est sous la forme normale de Chomsky si toute production est de la forme : avec A, B, C V \ Σ, et a Σ A a A BC Intérêt de la forme normale de Chomsky: Les arbres d analyse correspondants seront des arbres binaires Disposer d une forme normale pour les grammaires permet de simplifier les développements de certaines preuves 28 / 31
Formes normales Algorithme de mise en forme normale de Chomsky On part d une grammaire propre. 1. On introduit un nouvel ensemble de symboles non terminaux Z = {Z a a Σ} 2. On ajoute les règles Z a a pour tout a Σ 3. Toute règle X α où α est de longueur 1 est conservée Note puisque la grammaire est propre, α est un symbole non terminal 4. Toute règle X α où α 2 est transformée en 2 étapes : i) Tout symbole terminal a dans α est remplacé par le symbole non terminal Z a ii) Si α > 2, soit α = Y 1... Y p. On introduit p 2 nouveaux symboles non terminaux T 1,..., T p 2 et on remplace la règle X Y 1... Y p par les p 1 règles X Y 1 T 1, T 1 Y 2 T 2,..., T p 3 Y p 2 T p 2, T p 2 Y p 1 Y p La grammaire obtenue est en forme normale de Chomsky 29 / 31
Formes normales Algorithme de mise en forme normale de Chomsky : exemple On considère la grammaire propre ayant les règles suivantes : S asbs abs asb ab On introduit d abord deux nouveaux symboles non terminaux Z a et Z b, et on remplace les symboles terminaux. La grammaire devient S Z asz b S Z az b S Z asz b Z az b ; Z a a; Z b b On considère à présent les règles suivantes : S Z asz b S, que l on transforme en S Z at 1 ; T 1 ST 2 ; T 2 Z b S S Z az b S, que l on transforme en S Z at 2 ; T 2 Z b S S Z asz b, que l on transforme en S Z at 3 ; T 3 SZ b La grammaire devient sous forme normale de Chomsky : S Z at 1 Z at 2 Z at 3 Z az b T 1 ST 2; T 2 Z b S; T 3 SZ b Z a a; Z b b 30 / 31
Formes normales Forme normale de Greibach Forme normale de Greibach Une grammaire algébrique G = V, Σ, P, S est sous la forme normale de Greibach si toute production est de la forme : avec A, A i V \ Σ, et a Σ A aa 1... A n A a Intérêt de la forme normale de Greibach: A chaque dérivation, on détermine un préfixe de plus en plus long formé uniquement de symboles non terminaux Permet de construire plus aisément des analyseurs permettant de retrouver l arbre d analyse associé à un mot généré 31 / 31