Grammaire contextuelle
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. 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 , (où  est l'ensemble des variables ou symboles non terminaux et  est l'alphabet terminal ou l'ensemble des symboles terminaux) est contextuelle si toutes les règles de  sont de la forme 

où ,  et  sont des mots quelconques, avec  non vide, et  est une variable.
Ainsi, le remplacement de  par  se fait en présence du « contexte » .

Variante 
Parfois, on permet la règle

où  désigne le mot vide, sous réserve que  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 , la longueur de 
 est inférieure ou égale à la longueur de . 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 :

où  sont des variables et  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  :

 
 
 
 
 
 
 
 
 

Les deux premières règles servent à engendrer les mots .
Les trois règles suivantes permettent de remplacer  par . 
La dérivation pour  est la suivante :

 

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

 
 
 
 

 La grammaire croissante suivante engendre le langages non algébrique des carrés  :

 
 
 
 
 
 
 
 
 
 
 
 
 

La dérivation de abaaba est la suivante :

Grammaires croissantes et grammaires contextuelles 

Voici comment on peut transformer une grammaire croissante en une grammaire contextuelle.
Quitte à introduire de nouvelles règles de la forme , où  est une lettre, on peut supposer toutes les règles de la forme

où  et tous les symboles sont des variables. On remplace une telle règle par l'ensemble suivant :

Par exemple, la règle suivante :

est transformée en

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, 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.

Applications 

On a constaté 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 , ou d'autres systèmes. Les langages engendrés par ces grammaires sont  et se rangent strictement entre les langages algébriques et les langages contextuels.

Notes

Références

Source de la traduction 

Langage formel
Calculabilité
Informatique théorique