« Grammaire non contextuelle » : différence entre les versions

Un article de Wikipédia, l'encyclopédie libre.
Contenu supprimé Contenu ajouté
ManiacParisien (discuter | contributions)
m Une phrase au début avec les noms différents
ManiacParisien (discuter | contributions)
m →‎Bibliographie : étoffée
Ligne 162 : Ligne 162 :


== Bibliographie ==
== Bibliographie ==
Par sa nature fondamentale, de nombreux ouvrages d'informatique théorique contiennent au moins une section sur les grammairnes algébriques. Plusieurs livres ont également été traduits en français.

;Ouvrages en français
* {{Langages formels, calculabilité et complexité}} chapitre 2
<!-- Dragon -->

* {{Ouvrage | langue = fr | auteur1 = Alfred Aho | auteur2 = Monica Lam | auteur3 = Ravi Sethi | auteur4 = Jeffrey Ullman | titre = Compilateurs : principes, techniques et outils | sous-titre = Avec plus de 200 exercices | éditeur = Pearson | lieu = | numéro édition = 2 |année = 2007 | pages totales = 928 | isbn = 9782744070372 | isbn2 = 2744070378}}
* {{Ouvrage
<!-- Wolper -->
| auteur=Jean-Michel Autebert et Luc Boasson
* {{ouvrage|auteur=Pierre Wolper | titre=Introduction à la calculabilité|numéro d'édition=3|éditeur= Dunod |année=2006|isbn=2-10-049981-5}}.
| titre=Transductions rationnelles : Application aux Langages Algébriques
<!-- Autebert -->
| éditeur=Masson
* {{Ouvrage| auteur=Jean-Michel Autebert| titre=Langages algébriques| éditeur=Masson| année=1987
| année=1988
| isbn=978-2-225-81504-1
|isbn=978-2-225-81087-9}}
<!-- Autebert Boasson -->
|id=AutebertBoasson}}
* {{Ouvrage | auteur=Jean-Michel Autebert et Luc Boasson

| titre=Transductions rationnelles : Application aux Langages Algébriques | éditeur=Masson| année=1988
* {{Ouvrage
| isbn=978-2-225-81504-1 }}
| auteur=Jean-Michel Autebert
<!-- Carton -->
| titre=Langages algébriques
* {{Langages formels, calculabilité et complexité}} <!-- l’id autogénéré devrait suffire : Carton2008 -->
| éditeur=Masson
<!-- ABB -->
| année=1987
* {{Chapitre| auteurs = Jean-Michel Autebert, Jean Berstel et Luc Boasson
| isbn=978-2-225-81087-9
| titre chapitre = Context-free languages and pushdown automata
|id=Autebert}}
| auteurs ouvrage = G. Rozenberg, A. Salomaa (éditeurs)

| titre ouvrage = Handbook of Formal Languages| éditeur = Springer Verlag| année = 1997| volume = 1
* {{chapitre
| titre volume = Word, Language, Grammar
| auteurs = Jean-Michel Autebert, Jean Berstel et Luc Boasson
| passage = 111-174| isbn = 978-3540604204
| titre chapitre = Context-free languages and pushdown automata
| id = ABB
| auteurs ouvrage = G. Rozenberg, A. Salomaa (éditeurs)
| titre ouvrage = Handbook of Formal Languages
| éditeur = Springer Verlag
| année = 1997
| volume = 1
| titre volume = Word, Language, Grammar
| page début chapitre = 111--174
| isbn = 978-3540604204
| id = ABB
}}
}}
;Ouvrage en allemand
<!-- Erk Priese -->
* {{Ouvrage | langue = de | auteur1 = Katrin Erk | auteur2 = Lutz Priese | titre = Theoretische Informatik : eine umfassende Einführung | éditeur = Springer | lieu = Berlin | année = 2008 | pages totales = | isbn = 9783540763192 | oclc = 244015158}}.
;Ouvrages en anglais
<!-- Ginsburg (1966) -->
* {{Ouvrage | langue = en | auteur = Seymour Ginsburg |titre = The Mathematical Theory of Context Free Languages |éditeur=McGraw-Hill |lieu=|année=1966|pages totales =ix+ 232}} — Le premier livre sur les langages algébriques.
<!-- Aho et Ullman (1972-73)-->
*{{Ouvrage | langue = en | auteur1 = Alfred V. Aho | auteur2 = Jeffrey D. Ullman | titre = The theory of parsing, translation, and compiling |volume=1|titre volume=
Parsing | éditeur = Prentice-Hall | lieu = Englewood Cliffs, NJ | année = 1972 | pages totales = xii+543 | isbn = 0-13-914556-7 }}
*{{Ouvrage | langue = en | auteur1 = Alfred V. Aho | auteur2 = Jeffrey D. Ullman | titre = The theory of parsing, translation, and compiling |volume=2|titre volume= Compiling | éditeur = Prentice-Hall | lieu = Englewood Cliffs, NJ | année = 1973 | pages totales = xii+460 | isbn =0-13-914564-8}}
<!-- Harrison (1978) -->
* {{Ouvrage | langue = en | auteur = Michael A. Harrison | titre = Introduction to Formal Language Theory | éditeur = Addison-Wesley | lieu = Reading, Mass.| année = 1978 | pages totales = | isbn = 0201029553 | oclc = 266962302}}.
<!-- Hopcroft (2001) -->
* {{Ouvrage | langue = en | auteur1 = John E. Hopcroft | auteur2 = Rajeev Motwani | auteur3 = Jeffrey D. Ullman | titre = Introduction to Automata Theory, Languages, and Computation | éditeur = Addison Wesley | numéro d’édition = 2 |lieu = | année = 2001 | pages totales = 521 | isbn = 9780201441246 | isbn2 = 0201441241
|id=HMU}}.
<!-- Linz (2001) -->
* {{Ouvrage | langue = en | auteur = Peter Linz | titre = An Introduction to Formal Languages and Automata | éditeur = Jones & Bartlett Learning | lieu = | année = 2001 | pages totales = 410 | isbn = 9780763714222 | isbn2 = 0763714224}}.
; Cours
* {{Lien web| auteur= Anca Muscholl | titre=Langage hors-contexte |url =www.labri.fr/perso/anca/Langages/cours/cfl.pdf}}
* {{Lien web| auteur= Jean-François Perrot | titre= Les grammaires « context-free" et la hiérarchie de Chomsky |url=https://pages.lip6.fr/Jean-Francois.Perrot/inalco/Automates/Cours18.html}}
* {{Lien web| auteur= Jean Privat | titre=
Grammaires non contextuelles |url = http://info.uqam.ca/~privat/INF5000/05-grammaire.pdf}}
* {{Lien web| auteur=Jacques Désarménien | titre= Grammaires non contextuelles |url=
www-igm.univ-mlv.fr/~desar/Cours/automates/ch4.pdf}}


== Voir aussi ==
== Voir aussi ==

Version du 10 janvier 2016 à 08:52

En linguistique et en informatique théorique, une grammaire algébrique, ou grammaire non contextuelle, aussi appelée grammaire hors-contexte ou grammaire « context-free » est une grammaire formelle dans laquelle chaque règle de production est de la forme

est un symbole non terminal et est une chaîne composée de terminaux et/ou de non-terminaux. Le terme « non contextuel » provient du fait qu'un non terminal peut être remplacé par , sans tenir compte du contexte où il apparaît. Un langage formel est non contextuel (ou hors contexte, ou encore algébrique) s'il existe une grammaire non contextuelle qui l'engendre.

Les grammaires algébriques sont suffisamment puissantes pour décrire la partie principale de la syntaxe de la plupart des langages de programmation, avec au besoin quelques extensions. La forme de Backus-Naur est la notation la plus communément utilisée pour décrire une grammaire non contextuelle décrivant un langage de programmation. Dans la hiérarchie de Chomsky ces grammaires sont de type 2.

Si on trouve plusieurs termes pour nommer une grammaire algébrique, c'est que le terme anglais « context-free » est malcommode à traduire. Tous les termes donnés plus haut sont employés et équivalents.

Définitions formelles

Une grammaire algébrique est composée

  • d'un alphabet fini de symboles non terminaux ou variables
  • d'un alphabet fini , disjoint de , de symboles terminaux ou lettres terminales
  • d'un élément de appelé l'axiome
  • d'un ensemble fini de règles de dérivations ou productions.

Une règle est en général écrite sous la forme . La variable et le mot sont appelés respectivement le membre gauche et le membre droit de la règle. On étend cette notation et on écrit lorsque résulte de par le remplacement, dans , d'un membre gauche de règle (qui est donc une variable) par son membre droit, donc s'il existe des mots et une règle telle que et . On note la fermeture réflexive et transitive de cette relation. Lorsque , on dit que dérive en .

Le langage engendré par la grammaire , noté , est l'ensemble des mots terminaux (ne contenant plus de variables) qui dérivent de l'axiome , soit

Exemples

Exemple 1

Voici une grammaire algébrique simple :

La barre verticale sert à grouper les règles qui ont le même symbole non terminal en membre gauche, et dénote le mot vide. Cette grammaire engendre le langage : qui n'est pas un langage rationnel.

Exemple 2

Voici une grammaire algébrique qui engendre les expressions arithmétiques en trois variables , et , correctement parenthésées :

Cette grammaire peut par exemple engendrer .

Exemple 3

La grammaire suivante engendre le langage composé des mots en et en , et dont le nombre de est différent du nombre de  :

produit les mots ayant le même nombre de et de , produit les mots avec plus de que de , et produit les mots ayant moins de que de .

Exemple 4

Les langages de Dyck ou langages de parenthésages corrects sont des langages algébriques.

Un autre exemple

Les grammaires non contextuelles ne sont pas limitées aux langages formels en mathématiques. Le linguiste indien Pānini décrivit le sanskrit avec une grammaire non contextuelle.

Dérivations et arbres de dérivation

Il existe deux manières de décrire comment un mot a été engendré à partir d'une grammaire donnée, la première consiste à lister la suite des applications des règles, la deuxième synthétise cette liste en un arbre, appelé arbre de dérivation.

La première méthode liste la suite des mots (en commençant par le symbole de départ, l'axiome, et en finissant par le mot recherché). Les mots intermédiaires, contenant des variables, sont parfois appelés proto-phrases (sentential forms en anglais) ou mot du langage étendu. En plus de ces mots, on liste les règles appliquées pour passer d'un mot au suivant. Si de plus on utilise la stratégie consistant à « toujours remplacer le non-terminal le plus à gauche », alors il suffit en fait de donner la liste des règles appliquées. La dérivation obtenue s'appelle une dérivation gauche du mot. Par exemple, pour la grammaire suivante :

la chaîne «  » admet une dérivation gauche représentée par la liste [ (1), (1), (2), (2), (2) ]. De manière analogue, une dérivation droite est la liste des règles employées lorsque l'on remplace systématiquement le non-terminal le plus à droite en premier. Dans l'exemple précédent, une dérivation droite est [ (1), (2), (1), (2), (2)].

La distinction entre dérivation gauche et dérivation droite est importante en pratique car elle permet dans la plupart des analyseurs syntaxiques de tenir compte des priorités des opérations. Les analyseurs LL produisent des dérivations gauches, et les analyseurs LR des dérivations droite (en fait des réductions, c'est-à-dire déterminent d'abord la dernière règle appliquée).

Une dérivation impose de plus une structure hiérarchique de la chaîne dérivée. La structure de la chaîne « a + a + a », par exemple, est, pour une dérivation gauche :

S→S+S (1)
S→S+S+S (1)
S→a+S+S (2)
S→a+a+S (2)
S→a+a+a (2)
{ { { a }S + { a }S }S + { a }S }S

où { ... }S indique une sous-chaîne reconnue comme appartenant à S. Cette hiérarchie peut aussi être vue comme un arbre :

           S
          /|\
         / | \
        /  |  \
       S   +   S
      /|\      |
     / | \     |
    S  +  S    a 
    |     |
    a     a 

Cet arbre est appelé arbre de dérivation, arbre d'analyse ou arbre de syntaxe concrète (en opposition à l'arbre syntaxique abstrait) de la chaîne. La dérivation gauche présentée plus haut et la dérivation droite définissent le même arbre de dérivation. Ceci est normal car les deux dérivations sont deux parcours en profondeur de l'arbre de dérivation, le premier obtenu en choisissant le nœud le plus à gauche, le deuxième en choisissant le nœud le plus à droite. Il y a bijection entre les dérivations gauches et les dérivations droites.

Dans notre exemple, il y a une autre dérivation gauche possible

S→ S + S (1)vS→ a + S (2)
S→ a + S + S (1)
S→ a + a + S (2)
S→ a + a + a (2)

qui définit l'arbre syntaxique suivant :

           S 
          /|\
         / | \
        /  |  \
       S   +   S
       |      /|\
       |     / | \
       a    S  +  S
            |     |
            a     a 

Une grammaire est ambiguë lorsqu'au moins un mot engendré par la grammaire possède au moins deux arbres de dérivation distincts, sinon, c'est une grammaire inambiguë ou non ambiguë. Un langage est inambigu ou non ambigu s'il possède une grammaire inambiguë. Il est appelé inhéremment ambigu si toutes les grammaires qui l'engendrent sont ambiguës.

Un exemple de langage inhéremment ambigu est le langage:

Dans toutes les grammaires, les mots ont deux dérivations distinctes. La preuve se fait au moyen du lemme d'Ogden.

Dans l'analyse syntaxique de mots engendrés par une grammaire ambiguë, il faut faire usage de techniques d'analyse non déterministe et/ou de techniques adaptées (backtracking, règles de désambiguïsation,...)

Formes normales

Un langage algébrique peut être engendré par des grammaires algébriques de formes variées. Deux grammaires sont dites équivalentes lorsqu'elles engendrent le même langage.

Grammaire réduite et propre

  • Une grammaire réduite est une grammaire où toute variable est utile, c'est-à-dire figure dans au moins une dérivation d'un mot du langage. On peut toujours réduire une grammaire, c'est-à-dire supprimer, de manière effective, les variables inutiles.
  • Une grammaire est propre lorsqu'aucun membre droit de règle n'est égal au mot vide ou à une variable. On peut rendre une grammaire propre, à condition que le langage engendré ne contienne pas le mot vide, ou alors autoriser la seule -règle , où est l'axiome, avec la condition supplémentaire que ne figure dans aucun membre droit de règle.

Forme normale de Chomsky

Une grammaire est en forme normale de Chomsky si toutes ses règles sont de l'une des formes


sont des variables, et est une lettre. Toute grammaire peut être mise en forme normale de Chomsky, au mot vide près. Cette forme normale sert par exemple dans la définition d'un algorithme d'analyse syntaxique: c'est l'algorithme CYK. Il permet de décider, en temps polynomial, si un mot est dans le langage généré par cette grammaire.

Forme normale de Greibach

Une grammaire est en forme normale de Greibach si les membres droits de toutes ses règles commencent par une lettres, et ne sont suivies éventuellement que par des variables, formellement


sont des variables et sont des lettres. Par exemple, la grammaire

qui engendre le langage de Lukasiewicz est en forme normale de Greibach. La forme quadratique de Greibach impose de plus qu'il y ait au plus deux variables dans chaque membre droit de règle (ce qui est le cas ici). Toute grammaire peut être mise sous forme quadratique de Greibach, au mot vide près.

Forme normale bilatère de Greibach

La forme normale de Greibach bilatère est une forme bilatère de la forme normale de Greibach: les membres droits des règles sont soit des lettres terminales, soit commencent et finissent par des lettres terminales et ne contiennent au plus deux variables. Toutes les règles sont de la forme


sont des variables et sont des lettres. Toute grammaire peut être mise sous forme normale bilatère, et on peut même la supposer sous forme quadratique, c'est-à-dire que dans ces règles[1].

Grammaires étendues

On rencontre, surtout dans les applications, une forme de grammaires étendues: les membres droits des règles peuvent être des expressions rationnelles. Il en est ainsi dans la forme normale de Backus étendue. Plus précisément, notons l'ensemble des membres droits de règles dont le membre gauche est .

  • Dans la définition usuelle des grammaires algébriques, les ensembles sont finis pour toute variable .
  • Dans les grammaires étendues, les ensembles sont des langages rationnels qui sont donnés par des expressions régulières.
  • Dans une généralisation de ces grammaires, les ensembles sont eux-mêmes des langages algébriques.

On peut montrer que les deux extensions des grammaires engendrent toujours des langages algébriques.

Analyse syntaxique

Les grammaires algébriques sont suffisamment simples pour permettre la création d'analyseurs syntaxiques efficaces (contrairement aux grammaires contextuelles) en temps polynomial en la taille de la grammaire et la longueur du mot à analyser. Un tel analyseur a pour tâche de déterminer, pour un mot donné, si et comment il peut être engendré à partir de la grammaire. L'algorithme CYK et l'analyseur d'Earley sont des exemples de tels algorithmes. Les analyseurs LR et les analyseurs LL opèrent en temps linéaire en la longueur du mot à analyser, et sont employés dans la pratique. En revanche, ils ne permettent d'analyser que des familles plus restrictives de grammaires algébriques.

Notes

  1. Ce résultat est assez peu connu. Il a été prouvé par G. Hotz. Une preuve est donnée dans : Joost Engelfriet, « An elementary proof of double Greibach normal form », Information Processing Letters, vol. 44, no 2,‎ , p. 291–293. Une preuve et un exemple détaillé sont aussi donnés dans Autebert, Berstel Boasson (1997).

Bibliographie

Par sa nature fondamentale, de nombreux ouvrages d'informatique théorique contiennent au moins une section sur les grammairnes algébriques. Plusieurs livres ont également été traduits en français.

Ouvrages en français
  • Alfred Aho, Monica Lam, Ravi Sethi et Jeffrey Ullman, Compilateurs : principes, techniques et outils : Avec plus de 200 exercices, Pearson, , 2e éd., 928 p. (ISBN 9782744070372 et 2744070378)
  • Pierre Wolper, Introduction à la calculabilité, Dunod, , 3e éd. (ISBN 2-10-049981-5).
  • Jean-Michel Autebert, Langages algébriques, Masson, (ISBN 978-2-225-81087-9)
  • Jean-Michel Autebert et Luc Boasson, Transductions rationnelles : Application aux Langages Algébriques, Masson, (ISBN 978-2-225-81504-1)
  • Olivier Carton, Langages formels, calculabilité et complexité, [détail de l’édition] (lire en ligne)
  • Jean-Michel Autebert, Jean Berstel et Luc Boasson, « Context-free languages and pushdown automata », dans G. Rozenberg, A. Salomaa (éditeurs), Handbook of Formal Languages, vol. 1 : Word, Language, Grammar, Springer Verlag, (ISBN 978-3540604204), p. 111-174
Ouvrage en allemand
  • (de) Katrin Erk et Lutz Priese, Theoretische Informatik : eine umfassende Einführung, Berlin, Springer, (ISBN 9783540763192, OCLC 244015158).
Ouvrages en anglais
  • (en) Seymour Ginsburg, The Mathematical Theory of Context Free Languages, McGraw-Hill, , ix+ 232 — Le premier livre sur les langages algébriques.
  • (en) Alfred V. Aho et Jeffrey D. Ullman, The theory of parsing, translation, and compiling, vol. 1 : Parsing, Englewood Cliffs, NJ, Prentice-Hall, , xii+543 (ISBN 0-13-914556-7)
  • (en) Alfred V. Aho et Jeffrey D. Ullman, The theory of parsing, translation, and compiling, vol. 2 : Compiling, Englewood Cliffs, NJ, Prentice-Hall, , xii+460 (ISBN 0-13-914564-8)
  • (en) Michael A. Harrison, Introduction to Formal Language Theory, Reading, Mass., Addison-Wesley, (ISBN 0201029553, OCLC 266962302).
  • (en) John E. Hopcroft, Rajeev Motwani et Jeffrey D. Ullman, Introduction to Automata Theory, Languages, and Computation, Addison Wesley, , 521 p. (ISBN 9780201441246 et 0201441241).
  • (en) Peter Linz, An Introduction to Formal Languages and Automata, Jones & Bartlett Learning, , 410 p. (ISBN 9780763714222 et 0763714224).
Cours

Voir aussi