web-dev-qa-db-fra.com

Grammaires régulières vs sans contexte

J'étudie pour mon langages informatiques et il y a une idée que j'ai des problèmes à me casser la tête.

J'ai compris que les grammaires régulières sont plus simples et ne peuvent pas contenir d'ambiguïté, mais ne peuvent pas effectuer beaucoup de tâches requises pour les langages de programmation. J'ai aussi compris que grammaires sans contexte permet l'ambiguïté, mais permet certaines choses nécessaires à la programmation de langages (comme les palindromes).

Ce qui me pose problème, c’est de comprendre comment je peux déduire tout ce qui précède en sachant que non-finales de la grammaire normale peut mapper vers un terminal ou un non-terminal suivi d’un terminal ou que des cartes non-finales sans contexte. à n'importe quelle combinaison de terminaux et de terminaux.

Quelqu'un peut m'aider à mettre tout cela ensemble?

89
Jason Baker

La grammaire régulière 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, vous pouvez voir que la grammaire régulière est un sous-ensemble de la grammaire sans contexte.

Donc, pour un palindrome par exemple, est de la forme,

S->ABA
A->something
B->something

Vous pouvez clairement voir que les palindromes ne peuvent pas être exprimés en grammaire régulière car ils doivent être linéaires à droite ou à gauche et ne peuvent donc pas comporter de non-terminal des deux côtés.

Comme les grammaires régulières ne sont pas ambiguës, il n’existe qu’une règle de production pour un non-terminal donné, alors qu’il en existe plusieurs dans le cas d’une grammaire sans contexte.

68
Sujoy

Je pense que ce que 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 revient à dire qu'il nécessite une machine Turing complète.)

Donc, si nous pensons au lemme de pompage pour les langages normaux , ce qu'il dit, en gros, c’est que tout langage régulier peut être divisé en trois parties, x , y et z , où toutes les occurrences de la langue sont en xy * z (où * est la répétition de Kleene, c’est-à-dire 0 ou plusieurs copies de y .) Vous avez essentiellement un "non terminal" qui peut être développé.

Maintenant, qu'en est-il des langues sans contexte? Il y a un analogue pompage de lemme pour les langues sans contexte qui divise les chaînes de la langue en cinq parties, uvxyz , et où toutes les instances de la langue sont en uvjexyjez , pour i ≥ 0. Maintenant, vous avez deux "nonterminals" qui peuvent être répliqués ou pompés, tant que vous avez le même numéro .

53
Charlie Martin

La différence entre la grammaire normale et la grammaire dépourvue de contexte: (N, Σ, P, S): terminaux, non-terminaux, productions, état initial

● symboles élémentaires du langage définis par une grammaire formelle

● abc

Symboles non terminaux (ou variables syntaxiques)

● remplacés par des groupes de symboles terminaux conformément aux règles de production

● ABC

grammaire régulière: grammaire régulière droite ou gauche grammaire droite droite, toutes les règles obéissent aux formes

  1. B → a où B est un terminal en N et a un terminal en
  2. B → aC où B et C sont en N et a en
  3. B → ε où B est dans N et ε désigne la chaîne vide, c'est-à-dire la chaîne de longueur 0

grammaire régulière gauche, toutes les règles obéissent aux formes

  1. A → a où A est un terminal en N et a un terminal en
  2. A → Ba où A et B sont en N et a en
  3. A → ε où A est dans N et ε est la chaîne vide

grammaire libre de contexte (CFG)

○ grammaire formelle dans laquelle chaque règle de production est de la forme V → w

○ V est un symbole unique non terminal

○ w est une chaîne de terminaux et/ou des terminaux (w peut être vide)

15
stringRay2014

Expressions régulières

  • Base d'analyse lexicale
  • Représenter les langues ordinaires

Grammaires sans contexte

  • Base d'analyse
  • Représenter des constructions de langage

enter image description here

7
Ahmed Salem

Grammaire régulière: - La grammaire contenant la production suivante est RG:

V->TV or VT
V->T

où V = variable et T = terminal

RG peut être une grammaire linéaire gauche ou une grammaire droite, mais pas une grammaire linéaire moyenne.

Comme nous le savons, tous les RG sont des grammaires linéaires, mais seules les grammaires gauche linéaire ou droite sont RG.

Une grammaire normale peut être ambiguë.

S->aA|aB
A->a
B->a

Grammaire ambiguë: - pour une chaîne x, il existe plus d'un LMD ou plus d'un RMD ou plus d'un arbre d'analyse, ou un LMD et un RMD, mais les deux produisent un arbre d'analyse différent.

                S                   S

              /   \               /   \
             a     A             a     B
                    \                   \
                     a                   a

cette grammaire est ambiguë Grammaire parce que deux arbre d'analyse.

CFG: - Une grammaire dite CFG si sa production est sous la forme:

   V->@   where @ belongs to (V+T)*

DCFL: - Comme nous le savons tous, DCFL est LL (1) Grammaire et tout LL (1) est LR (1), ainsi il ne faut jamais être ambigu. donc DCFG est de ne jamais être ambigu.

Nous savons aussi que tous RL sont des DCFL donc RL ne soyez jamais ambigus. Notez que RG peut être ambigu, mais RL pas.

CFL: CFl Peut être ambigu ou non.

Note: RL ne soyez jamais intrinsèquement ambigu.

5
user2623906

Une grammaire est dépourvue de contexte si toutes les règles de production ont la forme suivante: A (c'est-à-dire que le côté gauche d'une règle ne peut être qu'une seule variable; le côté droit n'est pas restreint 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. V
la grammaire régulière est linéaire à droite ou à gauche, tandis que la grammaire sans contexte est 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 le jeu Context Free Languages ​​contient également le jeu de langages réguliers.