À quoi fait référence le «contexte» dans la «grammaire sans contexte»?

30

Il existe de nombreuses définitions en ligne sur ce qu'est une grammaire sans contexte, mais rien de ce que je trouve ne satisfait mon problème principal:

De quel contexte est-il libre?

Pour enquêter, j'ai recherché «grammaire contextuelle» sur Google, mais je n'ai toujours pas trouvé de quoi il s'agissait.

Quelqu'un peut-il expliquer à quoi ce contextterme fait référence dans ces noms?

CodyBugstein
la source
5
Je trouve l'explication de wikipedia assez bonne - "Une grammaire formelle est considérée comme" sans contexte "lorsque ses règles de production peuvent être appliquées quel que soit le contexte d'un non-terminal. Peu importe les symboles qui l'entourent, le seul non-terminal sur le côté gauche peut toujours être remplacé par le côté droit. " - il peut être reformulé et simplifié pour devenir "Plain English", mais l'essentiel me semble assez clair.
jkff
1
@jkff, c'est formidable que vous trouviez l'explication bonne, mais je n'arrive toujours pas à comprendre ce que signifie vraiment le «contexte» ici. J'ai besoin de voir un exemple où il y a du contexte et où il n'y a pas de contexte. Pour moi, il semble que chaque grammaire que j'ai vue a un contexte
CodyBugstein
N'est-ce pas clair d'après la définition?
Raphael
2
Ironiquement, le contexte crucial manquait dans cette définition , alors j'ai juste ajouté une phrase pour l'expliquer.
reinierpost
2
Exemple: en C ++ 11, il overridepeut s'agir d'un nom de variable ou d'un mot clé, selon l'endroit où il est utilisé (c'est-à-dire son contexte). S'il est utilisé après une déclaration de méthode, c'est un mot-clé. Sinon, ce n'est pas le cas. Ceci est un exemple de grammaire contextuelle.
Thomas Eding

Réponses:

37

Vous avez raison, il y a toujours un contexte dans un certain sens. Je ne pense pas que vous puissiez comprendre ce que signifie "contexte" dans "sans contexte" sans comprendre une production.

Une production est une règle de substitution. Il dit que, pour générer des chaînes dans le langage, vous pouvez substituer ce qui est à gauche à ce qui est à droite:

A -> xy

Cela signifie que la séquence abstraite A peut être remplacée par le caractère "x" suivi du caractère "y". Vous pouvez également avoir des productions plus complexes:

zA -> xy

Cela signifie que le caractère "z" suivi de la séquence abstraite A peut être remplacé par les caractères "x" et "y".

Une production hors contexte signifie simplement qu'il n'y a qu'une seule chose sur le côté gauche. Le premier exemple est sans contexte, car A peut être remplacé par "x" et "y", peu importe ce qui vient avant ou après. Cependant, dans le deuxième exemple, le caractère "z" doit apparaître avant le A, puis la combinaison peut être remplacée par "x" et "y", donc il y a un certain contexte impliqué.

Une grammaire sans contexte n'est alors qu'une grammaire avec uniquement des productions sans contexte.

Le deuxième exemple est en fait un exemple de production sans restriction. Il existe une autre catégorie qui se situe entre sans contexte et sans restriction, appelée «sensible au contexte». Un exemple de production contextuelle est:

zA -> zxy

La différence étant que ce qui précède A (et après) sur le côté gauche doit être conservé sur la droite. Cela signifie effectivement que seul A est substitué, mais ne peut être substitué que dans le contexte approprié.

Vaughn Cato
la source
2
Merci, c'est une énorme aide! Je n'ai encore jamais vu d'exemple de grammaire avec plus d'une variable sur le côté gauche comme vous l'avez montré. Je suppose que c'est pourquoi je ne pouvais pas voir quel était le "contexte". Merci
CodyBugstein
4
Un exemple contextuel plus simple serait peut-être zA -> zxy: A est toujours remplacé par xy, mais seulement après z.
MSalters
Plus en détail, cette réponse parle d'une grammaire sans restriction , tandis que @MSalters souligne que la grammaire sensible au contexte ferait un meilleur exemple de la signification du contexte.
@MSalters: Vous avez un bon point. J'ai modifié ma réponse. J'ai eu du mal à trouver un moyen d'ajouter ces détails à ma description sans que cela ne semble plus complexe, donc ce que j'ai fini par faire était simplement d'ajouter plus de détails à la fin.
Vaughn Cato
9

Considérons la règle et disons que vous avez une forme sententielle alors A se réduisant à β ne dépend pas de ce que sont α et δ. De cette façon, il est sans contexte car il ne dépend pas du contexte environnant.

Aβ
αAδ
iLoveCamelCase
la source
Qu'est-ce que la bêta? Est-ce un terminal ou une variable? Et pouvez-vous expliquer la "forme sententielle"? Est-ce à dire que cela ne peut pas être dérivé davantage?
CodyBugstein
La bêta peut être tout ce qui est juste que A-> bêta est une règle. La forme sententielle signifie que, étant donné votre symbole de départ en utilisant les règles de grammaire, nous le transformons en résultat. Ce résultat est appelé forme sententielle. Après chaque utilisation de chaque règle, nous obtenons un nouveau formulaire sententiel.
iLoveCamelCase
3
@Imray Vous devez aller voir les définitions formelles des grammaires et des grammaires sans contexte. Il n'y a pas de raccourci pour comprendre les objets formels .
Raphael
1
@Imray Une forme sententielle est une chaîne de symboles terminaux et non terminaux qui dérive de l' axiome (également appelé symbole initial ) par application de règles de grammaire (également appelées productions ). Une forme sententielle peut être dérivée en une autre en appliquant une règle à l'un de ses symboles non terminaux. Lorsqu'il ne reste plus de non-terminaux, la forme sententielle est une phrase , c'est-à-dire une chaîne ou un mot dans la langue définie ou générée par la grammaire. La terminologie vient des linguistes qui étaient à une époque les principaux contributeurs à cette partie de la théorie formelle du langage.
babou
Je pensais qu'une forme sententielle ne pouvait pas contenir de variables - elle devait être uniquement des terminaux.
CodyBugstein