J'étudie les compilateurs depuis un certain temps et je cherche ce que l'on entend par «contexte» en grammaire et ce que cela signifie pour la grammaire d'être «sans contexte», mais sans résultat.
Alors, quelqu'un peut-il m'aider?
J'étudie les compilateurs depuis un certain temps et je cherche ce que l'on entend par «contexte» en grammaire et ce que cela signifie pour la grammaire d'être «sans contexte», mais sans résultat.
Alors, quelqu'un peut-il m'aider?
Réponses:
Le contexte peut être expliqué en ce qui concerne les règles de production autorisées pour différentes grammaires dans la hiérarchie Chomsky.
Si vous envisagez des grammaires sans contexte, leurs règles de production ont la forme suivante:
Ainsi, vous pouvez observer que la partie gauche de ce type de règles est composée d'un seul symbole non terminal; ainsi, la substitution du symbole non terminal a lieu sans considérer son "contexte", c'est-à-dire les autres symboles qui l'entourent.
En revanche, si vous considérez les règles de production de grammaires contextuelles, elles ont la forme suivante:
où est un non-terminal et , , sont des séquences de non-terminaux et de terminaux.α β γ
Dans ce cas, le "contexte" (c'est-à-dire et ) du symbole non terminal à substituer influence l'effet de la substitution et il fait partie de la règle elle-même.γ
Vous pouvez trouver plus de détails dans cette réponse sur les mathématiques et dans cette réponse sur le génie logiciel.
"Contexte" est un texte environnant. Les grammaires sans contexte sont sans contexte dans le sens où les règles ressemblent à , plutôt qu'à . Le côté gauche d'une règle est toujours un symbole non terminal unique. Autrement dit, les règles pour développer un symbole non terminal ne dépendent pas du texte qui apparaît autour de ce symbole (son contexte), mais dépendent uniquement du symbole lui-même. Par exemple, dans la grammaire d'un langage de programmation, le terme s'étend au même type d'expression que vous écriviez une affectation (par exemple, ), en passant des arguments à une fonction (par exemple ) ou en renvoyant une valeur à partir d'une fonction (par exemple, ).chosesE x p rx:=y+z
f(y+z)
return y+z
De manière générale, même les langues normales peuvent avoir des dépendances de contexte, ce qui signifie que vous pouvez déterminer - dans une certaine mesure - de quelle manière les symboles peuvent apparaître à proximité d'autres symboles dans une chaîne qui appartient à cette langue.
Ce qui est spécifique aux grammaires sans contexte, c'est que lorsqu'il existe plusieurs façons de remplacer un symbole non terminal, en appliquant différentes règles avec le même non terminal sur le côté droit, le choix de la règle à appliquer ne dépend jamais de ce se passe autour de ce symbole pendant le processus de dérivation.
Vous pouvez les considérer comme des langues de dérivation sans contexte, des langues sans contexte pour faire court.