Grammaire contextuelle

Cet article est une ébauche concernant la logique et l’informatique.

Vous pouvez partager vos connaissances en l’améliorant (comment ?) selon les recommandations des projets correspondants.

Une grammaire contextuelle est une grammaire formelle dans laquelle les substitutions d'un symbole non terminal sont soumises à la présence d'un contexte gauche et d'un contexte droit. Elles sont plus générales que les grammaires algébriques. Les langages formels engendrés par les grammaires contextuelles sont les langages contextuels. Ils sont reconnus par les automates linéairement bornés.

Les grammaires contextuelles ont été décrites par Noam Chomsky[1]. Ce sont les grammaires de type 1 dans la hiérarchie de Chomsky. Elles peuvent servir à décrire la syntaxe de langages naturels où il apparaît qu'un mot est approprié dans un certain contexte, mais ne l'est pas par ailleurs.

Définition formelle

Une grammaire formelle G = ( V , A , P , S ) {\displaystyle G=(V,A,P,S)} , (où V {\displaystyle V} est l'ensemble des variables ou symboles non terminaux et A {\displaystyle A} est l'alphabet terminal ou l'ensemble des symboles terminaux) est contextuelle si toutes les règles de P {\displaystyle P} sont de la forme

u X v u x v {\displaystyle uXv\to uxv}

u {\displaystyle u} , v {\displaystyle v} et x {\displaystyle x} sont des mots quelconques, avec x {\displaystyle x} non vide, et X {\displaystyle X} est une variable. Ainsi, le remplacement de X {\displaystyle X} par x {\displaystyle x} se fait en présence du « contexte » ( u , v ) {\displaystyle (u,v)} .

Variante

Parfois, on permet la règle

S ε {\displaystyle S\to \varepsilon }

ε {\displaystyle \varepsilon } désigne le mot vide, sous réserve que S {\displaystyle S} n'apparaisse pas dans un membre droit de règle. Cette convention technique permet de considérer les langages contextuels comme un sur-ensemble des langages algébriques, sans devoir préciser que l'inclusion est limitée aux langages ne contenant pas le mot vide.

Grammaire croissante

Une grammaire est croissante ou monotone si, pour toute règle α β {\displaystyle \alpha \to \beta } , la longueur de α {\displaystyle \alpha } est inférieure ou égale à la longueur de β {\displaystyle \beta } . On sait transformer une grammaire croissante en une grammaire contextuelle (voir ci-dessous). Par conséquent, Les langages engendrés par les grammaires croissantes sont exactement les langages contextuels ne contenant pas le mot vide.

Une grammaire est en forme normale de Kuroda si les règles sont de l'une des formes suivantes :

X Y Z T {\displaystyle XY\to ZT}
X Z T {\displaystyle X\to ZT}
X Y {\displaystyle X\to Y}
X a {\displaystyle X\to a}

X , Y , Z , T {\displaystyle X,Y,Z,T} sont des variables et a {\displaystyle a} est une lettre terminale. Les grammaires en forme normale de Kuroda sont croissantes. Réciproquement, on sait transformer une grammaire croissante en une grammaire en forme normale de Kuroda. Par conséquent, ces grammaires engendrent exactement les langages contextuels ne contenant pas le mot vide. Elles sont ainsi nommées d'après Sige-Yuki Kuroda.

Exemples

  • La grammaire suivante engendre le langage non algébrique { a n b n c n | n 1 } {\displaystyle \{a^{n}b^{n}c^{n}|n\geq 1\}}  :
  1. S a S B C {\displaystyle S\to aSBC}
  2. S a B C {\displaystyle S\to aBC}
  3. C B H B {\displaystyle CB\to HB}
  4. H B H C {\displaystyle HB\to HC}
  5. H C B C {\displaystyle HC\to BC}
  6. a B a b {\displaystyle aB\to ab}
  7. b B b b {\displaystyle bB\to bb}
  8. b C b c {\displaystyle bC\to bc}
  9. c C c c {\displaystyle cC\to cc}

Les deux premières règles servent à engendrer les mots a n ( B C ) n {\displaystyle a^{n}(BC)^{n}} . Les trois règles suivantes permettent de remplacer C B {\displaystyle CB} par B C {\displaystyle BC} . La dérivation pour a a a b b b c c c {\displaystyle aaabbbccc} est la suivante :


S 1 a S B C 1 a a S B C B C 2 a a a B C B C B C 3 a a a B H B C B C 4 a a a B H C C B C 5 a a a B B C C B C 3 a a a B B C H B C 4 a a a B B C H C C 5 a a a B B C B C C 3 a a a B B H B C C 4 a a a B B H C C C 5 a a a B B B C C C 6 a a a b B B C C C 7 a a a b b B C C C 7 a a a b b b C C C 8 a a a b b b c C C 9 a a a b b b c c C 9 a a a b b b c c c {\displaystyle {\begin{aligned}S&\Rightarrow _{1}aSBC\Rightarrow _{1}a{\boldsymbol {aSBC}}BC\Rightarrow _{2}aa{\boldsymbol {aBC}}BCBC\\&\Rightarrow _{3}aaaB{\boldsymbol {HB}}CBC\Rightarrow _{4}aaaB{\boldsymbol {HC}}CBC\Rightarrow _{5}aaaB{\boldsymbol {BC}}CBC\\&\Rightarrow _{3}aaaBBC{\boldsymbol {HB}}C\Rightarrow _{4}aaaBBC{\boldsymbol {HC}}C\Rightarrow _{5}aaaBBC{\boldsymbol {BC}}C\\&\Rightarrow _{3}aaaBB{\boldsymbol {HB}}CC\Rightarrow _{4}aaaBB{\boldsymbol {HC}}CC\Rightarrow _{5}aaaBB{\boldsymbol {BC}}CC\\&\Rightarrow _{6}aa{\boldsymbol {ab}}BBCCC\Rightarrow _{7}aaa{\boldsymbol {bb}}BCCC\Rightarrow _{7}aaab{\boldsymbol {bb}}CCC\\&\Rightarrow _{8}aaabb{\boldsymbol {bc}}CC\Rightarrow _{9}aaabbb{\boldsymbol {cc}}C\Rightarrow _{9}aaabbbc{\boldsymbol {cc}}\end{aligned}}}


Le même langage peut être engendré par la grammaire croissante suivante :

  1. S a b c {\displaystyle S\to abc}
  2. S a S B c {\displaystyle S\to aSBc}
  3. c B B c {\displaystyle cB\to Bc}
  4. b B b b {\displaystyle bB\to bb}


  • La grammaire croissante suivante engendre le langages non algébrique des carrés C = { x x | x { a , b } + } {\displaystyle C=\{xx|x\in \{a,b\}^{+}\}}  :
  1. S a A S | b B S | a A ¯ | b B ¯ {\displaystyle S\rightarrow aAS|bBS|a{\bar {A}}|b{\bar {B}}}
  2. A a a A {\displaystyle Aa\rightarrow aA}
  3. B a a B {\displaystyle Ba\rightarrow aB}
  4. A b b A {\displaystyle Ab\rightarrow bA}
  5. B b b B {\displaystyle Bb\rightarrow bB}
  6. A A ¯ A ¯ a {\displaystyle A{\bar {A}}\rightarrow {\bar {A}}a}
  7. B A ¯ B ¯ a {\displaystyle B{\bar {A}}\rightarrow {\bar {B}}a}
  8. A B ¯ A ¯ b {\displaystyle A{\bar {B}}\rightarrow {\bar {A}}b}
  9. B B ¯ B ¯ b {\displaystyle B{\bar {B}}\rightarrow {\bar {B}}b}
  10. a A ¯ a a {\displaystyle a{\bar {A}}\rightarrow aa}
  11. b A ¯ b a {\displaystyle b{\bar {A}}\rightarrow ba}
  12. a B ¯ a b {\displaystyle a{\bar {B}}\rightarrow ab}
  13. b B ¯ b b {\displaystyle b{\bar {B}}\rightarrow bb}


La dérivation de abaaba est la suivante :

S 1 a A S 1 a A b B S 1 a A b B a A ¯ 4 a b A B a A ¯ 3 a b A a B A ¯ 2 a b a A B A ¯ 7 a b a A B ¯ a 8 a b a A ¯ b a 10 a b a a b a {\displaystyle {\begin{aligned}S&\Rightarrow _{1}aAS\Rightarrow _{1}aAbBS\Rightarrow _{1}aAbBa{\bar {A}}\\&\Rightarrow _{4}abABa{\bar {A}}\Rightarrow _{3}abAaB{\bar {A}}\Rightarrow _{2}abaAB{\bar {A}}\\&\Rightarrow _{7}abaA{\bar {B}}a\Rightarrow _{8}aba{\bar {A}}ba\Rightarrow _{10}abaaba\end{aligned}}}

Grammaires croissantes et grammaires contextuelles

Voici comment on peut transformer une grammaire croissante en une grammaire contextuelle[2]. Quitte à introduire de nouvelles règles de la forme X a {\displaystyle X\to a} , où a {\displaystyle a} est une lettre, on peut supposer toutes les règles de la forme

X 1 X 2 X n Y 1 Y 2 Y m {\displaystyle X_{1}X_{2}\cdots X_{n}\to Y_{1}Y_{2}\cdots Y_{m}}

m n 1 {\displaystyle m\geq n\geq 1} et tous les symboles sont des variables. On remplace une telle règle par l'ensemble suivant :

X 1 X 2 X n Z 1 X 2 X n Z 1 X 2 X n Z 1 Z 2 X n Z 1 Z 2 Z n 1 X n Z 1 Z 2 Z n 1 Y n Y n + 1 Y m Z 1 Z 2 Z n 1 Y n Y n + 1 Y m Z 1 Z 2 Z n 2 Y n 1 Y n Y n + 1 Y m Z 1 Z 2 Y 3 Y m Z 1 Y 2 Y 3 Y m Z 1 Y 2 Y m Y 1 Y 2 Y m . {\displaystyle {\begin{aligned}X_{1}X_{2}\cdots X_{n}&\to Z_{1}X_{2}\cdots X_{n}\\Z_{1}X_{2}\cdots X_{n}&\to Z_{1}Z_{2}\cdots X_{n}\\&\cdots \\Z_{1}Z_{2}\cdots Z_{n-1}X_{n}&\to Z_{1}Z_{2}\cdots Z_{n-1}Y_{n}Y_{n+1}\cdots Y_{m}\\Z_{1}Z_{2}\cdots Z_{n-1}Y_{n}Y_{n+1}\cdots Y_{m}&\to Z_{1}Z_{2}\cdots Z_{n-2}Y_{n-1}Y_{n}Y_{n+1}\cdots Y_{m}\\&\cdots \\Z_{1}Z_{2}Y_{3}\cdots Y_{m}&\to Z_{1}Y_{2}Y_{3}\cdots Y_{m}\\Z_{1}Y_{2}\cdots Y_{m}&\to Y_{1}Y_{2}\cdots Y_{m}\,.\end{aligned}}}

Par exemple, la règle suivante :

X 1 X 2 X 3 Y 1 Y 2 Y 3 Y 4 Y 5 {\displaystyle X_{1}X_{2}X_{3}\to Y_{1}Y_{2}Y_{3}Y_{4}Y_{5}}

est transformée en

X 1 X 2 X 3 Z 1 X 2 X 3 Z 1 X 2 X 3 Z 1 Z 2 X 3 Z 1 Z 2 X 3 Z 1 Z 2 Y 3 Y 4 Y 5 Z 1 Z 2 Y 3 Y 4 Y 5 Z 1 Y 2 Y 3 Y 4 Y 5 Z 1 Y 2 Y 3 Y 4 Y 5 Y 1 Y 2 Y 3 Y 4 Y 5 {\displaystyle {\begin{aligned}X_{1}X_{2}X_{3}&\to Z_{1}X_{2}X_{3}\\Z_{1}X_{2}X_{3}&\to Z_{1}Z_{2}X_{3}\\Z_{1}Z_{2}X_{3}&\to Z_{1}Z_{2}Y_{3}Y_{4}Y_{5}\\Z_{1}Z_{2}Y_{3}Y_{4}Y_{5}&\to Z_{1}Y_{2}Y_{3}Y_{4}Y_{5}\\Z_{1}Y_{2}Y_{3}Y_{4}Y_{5}&\to Y_{1}Y_{2}Y_{3}Y_{4}Y_{5}\end{aligned}}}


Problèmes de décision

  • Le problème de savoir si un mot x appartient au langage engendré par une grammaire contextuelle donnée est décidable et PSPACE-complet[3], au sens de la complexité algorithmique.
  • Le problème de décider si le langage engendré par une grammaire contextuelle est vide est indécidable[4].

Applications

On a constaté[5] que les langues naturelles peuvent être décrites, en général, par des grammaires contextuelles. Toutefois, la classe des langages contextuels est bien plus large que celle des langues naturelles. De plus, comme le problème de décision est complet pour PSPACE, cette description n'est pas utilisable en pratique. C'est pourquoi la linguistique s'est orientée vers l'élaboration de modèles de grammaires plus spécifiques, comme les grammaire d'arbres adjoints, les grammaires catégorielles combinatoires (en), ou d'autres systèmes. Les langages engendrés par ces grammaires sont légèrement contextuels (en) et se rangent strictement entre les langages algébriques et les langages contextuels.

Notes

  1. (en) Noam Chomsky, « Three models for the description of language », IRE Transactions on Information Theory, no 2,‎ , p. 113–124 (lire en ligne)
  2. Carton 2008, p. 144 - 145
  3. (en) Michael R. Garey et David S. Johnson, Computers and Intractability : A Guide to the Theory of NP-Completeness, New York, W. H. Freeman, , 338 p. (ISBN 0-7167-1045-5) — Problème AL3, « Linear bounded automaton acceptance », page 265.
  4. John E. Hopcroft et Jeffrey D. Ullman, Formal languages and their relation to automata, Addison-Wesley, (ISBN 0-201-02983-9, SUDOC 004772571) — Section 14.7 pages 230-23.
  5. Voir par exemple Solomon Marcus, « Contextual Grammars and Natural Languages », dans Grzegorz Rozenberg et Arto Salomaa (éditeurs), Handbook of Formal Languages, vol. 2 : Linear Modeling: Background and Application, Springer Science & Business Media, , 528 p. (ISBN 9783540606482), ​Chap. 5, p. 215-236.

Références

  • Olivier Carton, Langages formels, calculabilité et complexité, [détail de l’édition] (lire en ligne)
  • Michael Sipser, Introduction to the Theory of Computation, PWS Publishing Company, , 239 p. (ISBN 0-534-95250-X)
  • Pierre Wolper, Introduction à la calculabilité : cours et exercices corrigés, Paris, Dunod, , 3e éd., 224 p. (ISBN 2-10-049981-5)

Source de la traduction

  • (en) Cet article est partiellement ou en totalité issu de l’article de Wikipédia en anglais intitulé « Context-sensitive grammar » (voir la liste des auteurs).
v · m
Théorie des automates, des langages formels et des grammaires formelles
Hiérarchie de ChomskyGrammaireLangageAutomate

Type-0

Machine de Turing
Machine de Turing qui s'arrête toujours

Type-1

Type-2

Type-3

Grammaire régulière ou grammaire rationnelle

Chaque classe de langages est strictement contenue dans la classe immédiatement au-dessus d'elle.
Chaque automate et chaque grammaire d'une classe ont un équivalent dans la classe immédiatement au-dessus
.
  • icône décorative Portail de l’informatique
  • icône décorative Portail de l'informatique théorique