Forme normale de Chomsky
En informatique théorique, et notamment en théorie des langages, une grammaire non contextuelle est en forme normale de Chomsky si et seulement si toutes ses règles de production sont de la forme :
- ;
- ou ;
- ou
où sont des symboles non terminaux, est un symbole terminal, est l'axiome de la grammaire, et est le mot vide.
Si la dernière règle est présente, il est demandé que l'axiome n'apparaisse jamais dans le membre droit d'une règle.
Historique
La forme normale de Chomsky tient son nom du linguiste américain Noam Chomsky, qui a conçu également la hiérarchie qui porte son nom, et qui a décrit cette forme normale à cette occasion dans un article publié en 1959[1].
Variantes de définition
Une variante de la définition consiste à ne pas permettre le mot vide : seules des règles de la forme
- ou ,
sont permises où , et sont des symboles non terminaux et est un symbole terminal. C'est la définition adoptée par exemple par Carton[2] ou Hopcroft et. al. [3]. Bien entendu, ces grammaires n'engendrent pas le mot vide.
Une autre variante[4],[5] demande que les membres droits de règles soient de longueur au plus 2, mais n'impose pas que les membres droits de longueur 2 soient formés exclusivement de symboles non terminaux. Un telle grammaire est appelé 2-forme normale ou « 2NF ».
Propriétés et utilisations
Toute grammaire écrite en forme normale de Chomsky est une grammaire non contextuelle. Inversement, toute grammaire hors contexte peut être transformée en une grammaire équivalente (c'est-à-dire engendrant le même langage) en forme normale de Chomsky.
À l'exception de la règle (3), toutes les règles d'une grammaire sous forme normale de Chomsky sont croissantes ; par conséquent, tout au long d'une dérivation, les longueurs des mots croissent. Ils croissent de 1 avec une règle de type (1), et restent de même longueur avec une règle de type (2). La dérivation d'un mot de longueur se fait donc toujours en étapes : il y a étapes de type (1) et étapes de type (2). De plus, dans la mesure où toutes les règles de dérivation de non-terminaux transforment un non-terminal en deux non-terminaux, un arbre de dérivation fondé sur une grammaire en forme normale de Chomsky est un arbre binaire avec nœuds internes et feuilles, et sa hauteur est au maximum la longueur de la chaîne de caractères.
Grâce à ces propriétés, de nombreuses preuves dans le domaine des langages formels deviennent plus simples en utilisant la forme normale de Chomsky (par exemple le fait que l'appartenance d'un mot au langage engendré est décidable). Plusieurs algorithmes généraux d'analyse syntaxique, comme l'algorithme de Cocke-Younger-Kasami, emploient cette forme normale.
Conversion d'une grammaire en forme normale de Chomsky
La conversion d'une grammaire en forme normale de Chomsky se fait par une suite de transformations simples, appliquées dans un certain ordre. La plupart des manuels de théorie des automates décrivent cette conversion[6],[7],[8],[9], [10],[11] ,[12]. Dans un article pédagogique, Lange et Leiß[13] décrivent soigneusement ces opérations, et ils donnent des noms aux étapes de la transformation ce qui facilite l'exposition. De plus, ils indiquent l'ordre à utiliser qui permet de garantir une complexité linéaire.
En général, la transformation est précédée d'une opération — appelée « réduction » chez Carton 2008, (Section 2.1.2 : Grammaires réduites, p. 79) ou « eliminating useless symbols » chez Hopcroft, Motwani et Ullman 2007, (Section 7.1.1 : Eliminating useless symbols, p. 262) — qui sert à supprimer les variables inutiles. Une variable X est utile si elle figure dans une dérivation de l'axiome en un mot terminal; pour cela, elle doit être accessible à partir de l’axiome par une suite de dérivations, et être « coaccessible », au sens qu'elle doit pouvoir être dérivée en un mot terminal.
Chacune des cinq transformation suivantes (START, TERM, BIN, DEL, UNIT) établit une des propriétés requise par la forme normale de Chomsky. On les présente, en suivant Lange et Leiß, comme si elles s'appliquaient à une grammaire générale ; on verra plus loin que l'ordre d'application est important si on veut minimiser la complexité en temps. Dans ces ordres particuliers, certaines opérations sont plus simples, comme l'opération UNIT qui sert à éliminer les règles unité.
La complexité des opérations se mesure par rapport à la taille de la grammaire G donnée. Elle est définie simplement[13] comme la place que prend l'écriture des règles, sont
où la sommation porte sur toutes les règles de la grammaire. En particulier, une ε-règle contribue pour 1 dans la somme.
START : Suppression de l’axiome dans les membres droits de règles
Pour cela, on introduit un nouveau symbole qui devient l'axiome, et la règle
- ,
où est l’ancien axiome. Ceci ne modifie pas le langage engendré, et la variable ne figure pas dans un membre droit de règle.
TERM : Suppression des lettres terminales dans les membres droits de règles de longueur au moins 2
Si une lettre terminale figure dans un membre droit de règle de longueur au moins 2, on la remplace par une nouvelle et on ajoute la nouvelle règle
et on remplace la règle ci-dessus par
En fait, on fait ce remplacement simultanément pour toutes les occurrences de lettres terminales dans les membres droits de règles. Cela ne modifie pas le langage engendré, et augmente le nombre de règles d'au plus le nombre de lettres terminales. L'opération est donc linéaire en fonction de |G|.
BIN : Suppression des membres droits avec plus de deux symboles
On remplace une règle
- ,
par les règles
- ,
où les sont des nouveaux symboles non terminaux[14],[15]. Cette opération au plus triple la taille de la grammaire.
DEL : Élimination des ε-règles
Une ε-règle est une règle de la forme
- ,
où n'est pas l’axiome de la grammaire. On commence par déterminer les variables qui dérivent en ε ; ces variables, appelées annulables (« nullable » en anglais), se calculent par récurrence : X est annulable s'il existe une règle
- telle que sont tous annulables.
Pour toute variable , annulable ou non, toute règle
est remplacée par toutes les règles obtenues en supprimant une ou plusieurs, voire toutes les variables annulables dans le membre droit de règle, puis on supprime toutes les ε-règles (à l'exception de celle de l'axiome si elle est présente)[16].
Par exemple, dans la grammaire suivante avec axiome S0,
- S0 → AbB | C
- B → AA | AC
- C → b | c
- A → a | ε
La variable A, et par conséquent B, sont annulables, et ni C ni S0 ne le sont. Dans la version intermédiaire suivante, on a coloré les variables à supprimer :
- S0 → AbB | AbB | AbB | AbB | C
- B → AA | AA| AA | AεA | AC | AC
- C → b | c
- A → a | ε
Après suppression des variables en jaune, et des règles A → ε (d'origine) et B → ε (produite), on obtient la grammaire
- S0 → AbB | Ab | bB | b | C
- B → AA | A | AC | C
- C → b | c
- A → a
Cette grammaire engendre le même langage, sans ε-règles.
UNIT : Suppression des règles unité
Une règle unité est une règle de la forme
où et sont des variables, et plus généralement une règle
- ,
où toutes les variable de sont annulables. Pour éliminer ce type de règles, on la remplace par la règle
pour chaque règle
sauf si c'est une règle unité précédemment enlevée[17]. Cette technique est complétée dans le cas de cycles (comme l'existence de trois règles ) par l'identification des variables d'un cycle : elles sont toutes remplacées par l'une d'entre elles. La transformation UNIT peut faire passer la taille de la grammaire de |G| à |G|2.
Ordre des transformations
Préservation des propriétés des transformations | |||||
---|---|---|---|---|---|
✓ la transformation X préserve le résultat de Y ✗ la transformation X peut altérer le résultat de Y. | |||||
X\Y | START | TERM | BIN | DEL | UNIT |
START | ✓ | ✓ | ✓ | ✗ | |
TERM | ✓ | ✗ | ✓ | ✓ | |
BIN | ✓ | ✓ | ✓ | ✓ | |
DEL | ✓ | ✓ | ✓ | ✗ | |
UNIT | ✓ | ✓ | ✓ | (✓)* | |
*UNIT conserve le résultat de DEL si START a été effectué au préalable. |
L'ordre dans lequel les opérations sont appliquées est important pour deux raisons : d'abord, il est possible qu'une transformation puisse annuler l'effet d'une opération précédente ; par exemple, si on utilise START après UNIT, on réintroduit une règle unité. Sur la table, les ordres convenables sont indiqués.
Une autre raison pour choisir l'ordre des opérations avec soin est l'augmentation possible de la taille de la grammaire, et par là même la complexité des opérations. La taille de la grammaire résultat peut aller de |G|2 to 22|G| pour une grammaire de taille |G|[18]. L'augmentation dépend de l'ordre entre DEL et BIN. Il peut être exponentiel si DEL est opéré en premier, puisqu'une règle dont le membre droit est de longueur n peut produire 22n règles, et sinon est linéaire. UNIT peut provoquer une augmentation quadratique de la taille[4].
La plus petite augmentation de taille se produit pour les ordres (START,TERM,BIN,DEL,UNIT) et (START,BIN,DEL,UNIT,TERM).
Preuve de correction
Les divers manuels et cours de théorie des langages contiennent en général, en plus de l'exposé des procédures, des démonstrations de la correction des algorithmes. Une formalisation de ces opérations de réduction, à savoir la suppression de variables inutiles, l’élimination des règles unité et des epsilon-règles dans l’assistant de preuve Coq a été entreprise par Marcus V. M. Ramos et Ruy J. G. B. de Queiroz[19]. Dans ce formalisme, Coq prouve que les opérations sont correctes en ce sens qu’ils préservent le langage engendré par la grammaire.
Références
- (en) Noam Chomsky, « On Certain Formal Properties of Grammars », Information and Control, vol. 2, , p. 137–167 (DOI 10.1016/s0019-9958(59)90362-6, lire en ligne [PDF]).
- Carton 2008
- Hopcroft, Motwani et Ullman 2007
- Lange et Leiß 2009, p. 5.
- Romain Legendre et François Schwarzentruber, Compilation : analyse lexicale et syntaxique : Du texte à sa structure en informatique, Paris, Ellipse, , 312 p. (ISBN 978-2-340-00366-8)
- Hopcroft et Ullman 1979, p. 87-94.
- Hopcroft, Motwani et Ullman 2007, Section 7.1 : Normal Forms for Context-Free Grammars, p. 261-275.
- Wegener 1993, Section 6.2 Die Chomsky-Normalform für kontextfreie Grammatiken, p. 149-152.
- Carton 2008, Section 2.1.4 : Forme normale quadratique, p. 80-82.
- Sipser 2013, Section 2.1: Context-free grammars. Chomsky normal form p. 108.
- Martin 2003, Section 6.6 : Simplified forms and normal forms, p. 237-240.
- Linz 2001, Chapter 6 : Simplification of context-free grammars, p. 149-164
- Lange et Leiß 2009.
- Hopcroft et Ullman 1979, p. 93.
- Hopcroft, Motwani et Ullman 2007, p. 272
- Hopcroft, Motwani et Ullman 2007, p. 265.
- Hopcroft, Motwani et Ullman 2007, p. 268.
- Lange et Leiß 2009, p. 7.
- Marcus V. M. Ramos et Ruy J. G. B. de Queiroz, « Formalization of simplification for context-free grammars », préprint arXiv, (arXiv 1509.02032v2).
Bibliographie
- Article d'exposition
- Martin Lange et Hans Leiß, « To CNF or not to CNF? An Efficient Yet Presentable Version of the CYK Algorithm », Informatica Didactica, vol. 8, (lire en ligne) — Informatica Didactica est un journal électronique.
- Manuels
- Olivier Carton, Langages formels, calculabilité et complexité : licence et master de mathématiques ou d'informatique, option informatique de l'agrégation de mathématiques, Paris, Vuibert, , 237 p. (ISBN 978-2-7117-2077-4, présentation en ligne)
- John E. Hopcroft et Jeffrey D. Ullman, Introduction to Automata Theory, Languages and Computation, Addison-Wesley,
- (en) John E. Hopcroft, Rajeev Motwani et Jeffrey D. Ullman, Introduction to Automata Theory, Languages, and Computation, Addison-Wesley, , 3e éd. (ISBN 978-0-32146225-1)
- (en) John C. Martin, Introduction to languages and the theory of computation, McGraw-Hill Science/Engineering/Math, , 543 p. (ISBN 978-0-07-232200-2 et 0072322004)
- (en) Peter Linz, An Introduction to Formal Languages and Automata, Jones & Bartlett Learning, , 410 p. (ISBN 978-0-7637-1422-2 et 0763714224, lire en ligne).
- (en) Michael Sipser, Introduction to the theory of computation, Boston, MA, Cengage Learning, , 3e éd., 480 p. (ISBN 978-1-133-18779-0, OCLC 761858892, lire en ligne).
- (de) Ingo Wegener, Theoretische Informatik : Eine algorithmenorientierte Einführung, Vieweg+Teubner Verlag, coll. « Leitfäden und Monographien der Informatik », , 238 p. (ISBN 978-3-519-02123-0 et 3519021234)
- Cours en ligne
- Antoine Rozenknop, « Modèles de Langages et Analyse Syntaxique », Université Paris Nord, .
- Jacques Désarménien, « Chapitre 4 : Grammaires non contextuelles », Université de Marne-la-Vallée.
- Richard Cole, « 'Converting CFGs to CNF (Chomsky Normal Form) », New York University, . — utilise l’ordre TERM, BIN, START, DEL, UNIT.
Voir aussi
- Grammaire non contextuelle
- Grammaire contextuelle
- Forme normale de Greibach
- Compilation
- Forme de Backus-Naur
- Algorithme de Cocke-Younger-Kasami
- Forme normale de Kuroda
- Portail de l'informatique théorique