web-dev-qa-db-fra.com

Comment puis-je déterminer si une langue est sans contexte ou non?

Comment savoir si les langues sont ou non contextuelles?

25
user423733

Tout d'abord, vous devriez essayer de construire une grammaire sans contexte qui forme la langue du sujet. Une grammaire est sans contexte si les côtés gauche de toutes les productions contiennent exactement un symbole non terminal. Par définition, s'il en existe un, le langage est hors contexte.

Une construction équivalente serait un automate déroulant . C'est la même chose que DFA, mais avec une pile disponible. Il peut être plus facile à construire qu'une grammaire.

Cependant, si vous ne parvenez pas à construire une grammaire ou un automate, cela ne signifie pas qu'une langue n'est pas sans contexte; peut-être, c'est juste vous qui ne pouvez pas construire une grammaire assez délicate (par exemple, j'ai passé une fois environ 7 heures à construire une grammaire pour une langue délicate).

Si vous commencez à douter que la langue soit sans contexte, vous devriez utiliser un soi-disant "pompage du lemme pour les langues sans contexte" . Il décrit une propriété de toutes les langues sans contexte, et si votre langue la viole, alors elle n'est certainement pas sans contexte (voir sage notes sur Wikipedia).

Ce lemme est un corollaire de le lemme d'Ogden . Donc Ogden est plus puissant, et si vous n'avez pas appliqué le lemme de pompage, vous pouvez essayer Ogden (il est utilisé de la même manière).

28
P Shved

Modifier

Comme suggéré dans les commentaires pour prouver qu'une langue n'est pas CFG, je crois que c'est en utilisant un lemme d'ogdens. La mauvaise interprétation inhérente contenue dans ma réponse précédente doit être excusée :) Conserver la réponse précédente pour les rôdeurs.

Ancienne réponse

En regardant la grammaire et les règles utilisées! Comme vu de l'image (avec la permission de la hiérarchie Chomsky de Wikipédia). Seules les langues régulières ne sont pas dépourvues de contexte. Impliquer tout ce qui utilise des choses de forme A-> aB ou A-> Ba seul n'est pas sans contexte.

alt text

Modifier Les définitions A-> aB et A-> Ba sont destinées à exprimer les grammaires récursives gauche et droite et ne doivent pas être prises à la lettre.

2
questzen

Vous avez besoin d'une grammaire pour la langue afin de déterminer si elle est sans contexte. Une grammaire est sans contexte si toutes ses productions ont la forme "(non-terminal) -> séquence de terminaux et de non-terminaux".

1
falagar