Libre de tout contexte grammaires rapport sensible au contexte des grammaires?
Quelqu'un peut m'expliquer pourquoi les grammaires [grammaire libre de tout contexte et sensible au contexte de la grammaire] de ce genre accepte une Chaîne de caractères?
Ce que je sais, c'est
Contexte de la grammaire est une grammaire formelle dans laquelle chaque production(réécriture) de la règle est une forme de V→w
Où V est un seul symbole non-terminal en question et w est une chaîne de terminaux et/ou de non-terminaux. w peut être vide
Sensible au contexte de la grammaire est une grammaire formelle dans laquelle les membres de gauche et de droite, de toute la production (réécriture) les règles peuvent être entourées par un cadre de terminaux et de non-terminal en question symboles.
Mais comment puis-je expliquer pourquoi ces grammaire accepte une Chaîne de caractères?
Vous devez vous connecter pour publier un commentaire.
Un détail important ici est que les grammaires ne sont pas accepter chaînes; ils générer cordes. Les grammaires sont des descriptions de langues que fournir un moyen pour générer possible toutes les chaînes contenues dans la langue. Afin de savoir si une chaîne donnée est contenue dans la langue, vous pouvez utiliser un de reconnaissance, une sorte d'automate qui traite d'une chaîne donnée et dit "oui" ou "non".
Un libre de tout contexte de grammaire (CFG) est une grammaire où (comme vous l'avez remarqué) chaque production est de la forme A → w, où A est un non-terminal en question et w est une chaîne de terminaux et nonterminals. De manière informelle, une CFG est une grammaire où tout non-terminal en question peut être élargie à l'une de ses productions à tout moment. La langue de la grammaire est l'ensemble des chaînes de terminaux qui peuvent être dérivées à partir du symbole de démarrage.
Un contexte-sensibles grammaire (CSG) est une grammaire où chaque production est de la forme de la cire → wyx, où w et x sont des chaînes de terminaux et nonterminals et y est aussi une chaîne de terminaux. En d'autres termes, les productions de donner des règles en disant: "si vous voyez Un dans un contexte donné, vous pouvez remplacer l'Un par la chaîne de y." Il est regrettable que ces grammaires sont appelés "sensible au contexte des grammaires", car cela signifie que "context-free" et "sensible au contexte" ne sont pas opposés, et cela signifie qu'il y a certaines classes de grammaires que sans doute beaucoup de l'information contextuelle en compte mais ne sont pas officiellement considérés comme sensibles au contexte.
Pour déterminer si une chaîne est contenue dans un CFG ou de la CSG, il existe de nombreuses approches. Tout d'abord, vous pourriez construire un module de reconnaissance de la grammaire. Pour CFGs, le automate à pile (PDA) est un type d'automate qui accepte précisément le contexte des langues, et il est d'une construction simple pour transformer n'importe quel CFG dans un PDA. Pour la sensibilité au contexte des grammaires, l'automate vous utilisez est appelé un linéaire bornée automate (LBA).
Cependant, ces approches ci-dessus, si le traité naïvement, ne sont pas très efficaces. Pour déterminer si une chaîne est contenue dans la langue d'une CFG, il y a beaucoup plus d'algorithmes efficaces. Par exemple, beaucoup de grammaires peuvent avoir LL(k) ou LR(k) analyseurs construit pour eux, ce qui vous permet (en temps linéaire) décider si une chaîne est contenue dans la grammaire. Toutes les grammaires peuvent être analysés à l'aide de la Earley analyseur, qui en O(n3) peut déterminer si une chaîne de longueur n est contenue dans la grammaire (en fait, il peut analyser toute ambiguïté CFG en O(n2), et avec lookaheads peut analyser n'importe quel LR(k) de la grammaire en O(n) le temps!). Si vous avez été purement intéressé à la question "est-chaîne x figurant dans le langage généré par la grammaire G?", puis un de ces approches serait excellent. Si vous avez voulu savoir comment la chaîne de x a été généré (par trouver un arbre d'analyse), vous pouvez adapter ces approches aussi de fournir ces informations. Cependant, l'analyse des Bec est, en général, PSPACE-complet, donc il n'y a pas connue l'analyse des algorithmes pour eux qui s'exécutent dans le pire des cas en temps polynomial. Il y a quelques algorithmes qui, dans la pratique, ont tendance à courir vite, cependant. Les auteurs de de l'Analyse des Techniques: Un Guide Pratique (voir ci-dessous) ont mis ensemble un fantastique page contenant toutes sortes de l'analyse d'algorithmes, y compris une analyse contextuelle des langues.
Si vous êtes intéressés à en apprendre plus sur l'analyse, vérifiez que l'excellent livre "L'Analyse Des Techniques: Un Guide Pratique, Deuxième Édition" par Grune et Jacobs, qui traite de toutes sortes de l'analyse d'algorithmes pour déterminer si une chaîne est contenue dans une grammaire et, dans l'affirmative, comment il est généré par l'algorithme d'analyse.
Espérons que cette aide!
Comme l'a dit avant, une Grammaire n'accepte pas une chaîne, mais c'est simplement un moyen pour générer des mots spécifiques d'une Langue que vous analysez. En fait, la grammaire de la règle générative dans le Langage Formel de la Théorie à la place de la finite state automaton faire ce que vous dites, la reconnaissance des chaînes spécifiques.
En particulier, vous avez besoin récursive énumérable automate afin de reconnaître le Type 1 Langues( le Contexte Sensible de Langues dans la Hiérarchie de Chomsky ).
Une grammaire pour une langue spécifique, seulement des subventions à vous de spécifier la propriété de toutes les chaînes qui se réunissent pour l'ensemble des chaînes de la CS de la langue.
J'espère que mon explication a été claire.
Un moyen facile de montrer qu'une grammaire accepte une chaîne de caractères est de montrer les règles de production de cette chaîne.