J'étudie pour mon test de langage informatique , et il y a une idée qui me pose des problèmes.
J'ai compris que les grammaires régulières sont plus simples et ne peuvent pas contenir d'ambiguïté, mais ne peuvent pas faire beaucoup de tâches requises pour les langages de programmation. J'ai aussi compris que les grammaires sans contexte permettent l'ambiguïté, mais permettent certaines choses nécessaires pour les langages de programmation (comme les palindromes).
Ce que j'ai du mal à comprendre, c'est de comprendre comment je peux dériver tout ce qui précède en sachant que les non - terminaux de grammaire régulière peuvent mapper vers un terminal ou un non-terminal suivi d'un terminal ou qu'un non-terminal sans contexte correspond à n'importe quelle combinaison de terminaux et de non-terminaux. .
Quelqu'un peut-il m'aider à mettre tout cela ensemble?
la source
A-> a | c
et queB->b
cette grammaire autorise les non-palindromes. Par exemple, je pourrais produire:S->ABA->aBA->abA->abc
. Le problème est que nous ne voulons pas produire deux variables dans la première règle, mais plutôt deux terminaux. Une possibilité pour une grammaire qui autorise les palindromes est:S -> aSa | bSb | a | b
S -> aSa | e
et lesa(aa)*a
deux décrivent une langue ordinaire. Cela montre qu'un CFG peut décrire un langage régulier, même s'il viole la linéarité gauche ou droite. Certes, c'est un palindrome pas si évident.Je pense que ce à quoi vous voulez penser, ce sont les différents lemmata de pompage. Un langage régulier peut être reconnu par un automate fini. Un langage sans contexte nécessite une pile, et un langage sensible au contexte nécessite deux piles (ce qui équivaut à dire qu'il nécessite une machine de Turing complète.)
Donc, si nous pensons au lemme de pompage pour les langues régulières , ce qu'il dit, essentiellement, c'est que toute langue régulière peut être décomposée en trois parties, x , y et z , où toutes les instances du langage sont en xy * z (où * est la répétition de Kleene, c'est-à-dire 0 ou plusieurs copies de y .) Vous avez fondamentalement un "non terminal" qui peut être développé.
Maintenant, qu'en est-il des langages sans contexte? Il existe un lemme de pompage analogue pour les langages sans contexte qui divise les chaînes du langage en cinq parties, uvxyz , et où toutes les instances du langage sont en uv i xy i z , pour i ≥ 0. Maintenant, vous avez deux "non-terminaux" "qui peut être répliqué, ou pompé, tant que vous avez le même nombre .
la source
La différence entre la grammaire régulière et sans contexte: (N, Σ, P, S): terminaux, non-terminaux, productions, état de départ Symboles terminaux
● symboles élémentaires de la langue définis par une grammaire formelle
● abc
Symboles non terminaux (ou variables syntaxiques)
● remplacé par des groupes de symboles de terminaux selon les règles de production
● ABC
grammaire régulière: grammaire régulière droite ou gauche grammaire régulière droite, toutes les règles obéissent aux formes
gauche grammaire régulière, toutes les règles obéissent aux formes
grammaire sans contexte (CFG)
○ grammaire formelle dans laquelle toute règle de production est de la forme V → w
○ V est un seul symbole non terminal
○ w est une chaîne de terminaux et / ou de non terminaux (w peut être vide)
la source
Grammaire régulière: - la grammaire contenant la production comme suit est RG:
où V = variable et T = terminal
RG peut être la Grammaire Linéaire Gauche ou la Grammaire Liner Droite, mais pas la Grammaire Linéaire Moyenne.
Comme nous le savons, tous les RG sont de la grammaire linéaire, mais seule la grammaire linéaire gauche ou droite est RG.
Une grammaire régulière peut être ambiguë.
Grammaire ambiguë: - pour une chaîne x, il existe plus d'un LMD ou plus de RMD ou plus d'un arbre d'analyse ou un LMD et un RMD mais tous deux produisent un arbre d'analyse différent.
cette grammaire est une grammaire ambiguë parce que deux arbres d'analyse.
CFG: - Une grammaire dite CFG si sa Production est sous forme:
DCFL: - comme nous le savons, tous les DCFL sont LL (1) Grammar et tous LL (1) sont LR (1) donc ce n'est jamais ambigu. donc DCFG n'est jamais ambigu.
Nous savons également que tous les RL sont DCFL, donc RL ne doit jamais être ambigu. Notez que RG peut être ambigu mais pas RL.
CFL: CFl Peut ou non ambigu.
Remarque: RL ne doit jamais être intrinsèquement ambigu.
la source
Expressions régulières
Grammaires sans contexte
la source
Une grammaire est sans contexte si toutes les règles de production ont la forme: A (c'est-à-dire que le côté gauche d'une règle ne peut être qu'une seule variable; le côté droit est illimité et peut être n'importe quelle séquence de terminaux et de variables). Nous pouvons définir une grammaire comme un 4-tuple où V est un ensemble fini (variables), _ est un ensemble fini (terminaux), S est la variable de départ et R est un ensemble fini de règles, dont chacune est un mappage La
grammaire régulière V est linéaire à droite ou à gauche, tandis que la grammaire sans contexte est essentiellement une combinaison de terminaux et de non-terminaux. par conséquent, nous pouvons dire que la grammaire régulière est un sous-ensemble de la grammaire sans contexte. Après ces propriétés, nous pouvons dire que l'ensemble de langues sans contexte contient également l'ensemble de langues régulières
la source
Fondamentalement, la grammaire régulière est un sous-ensemble de la grammaire sans contexte, mais nous ne pouvons pas dire que la grammaire sans contexte est une grammaire régulière. La grammaire sans contexte est principalement ambiguë et la grammaire régulière peut être ambiguë.
la source
une grammaire régulière n'est jamais ambiguë car elle est soit linéaire à gauche, soit linéaire à droite, nous ne pouvons donc pas faire d'arbre de décision à deux pour la grammaire régulière, donc elle est toujours sans ambiguïté, mais à part la grammaire régulière, tous peuvent ou non être réguliers
la source