Gauche-Linéaire et Droit-Linéaire des Grammaires
J'ai besoin d'aide avec la construction d'une gauche-linéaire et droit-linéaire de la grammaire pour les langues ci-dessous?
a) (0+1)*00(0+1)*
b) 0*(1(0+1))*
c) (((01+10)*11)*00)*
Pour la a) j'ai le texte suivant:
Left-linear
S --> B00 | S11
B --> B0|B1|011
Right-linear
S --> 00B | 11S
B --> 0B|1B|0|1
Est-ce correct? J'ai besoin d'aide avec b & c.
OriginalL'auteur user1585646 | 2012-12-11
Vous devez vous connecter pour publier un commentaire.
De la construction d'un équivalent Régulière de la Grammaire à partir d'une Expression Régulière
Tout d'abord, je commence par quelques règles simples à construire Régulière de la Grammaire(RG) de l'Expression Régulière(RE).
Je suis en train d'écrire des règles de Droit Linéaire de la Grammaire (en laissant comme un exercice d'écriture des règles similaires pour la Gauche Linéaire de la Grammaire)
REMARQUE: lettres majuscules sont utilisées pour les variables, et les petits pour les terminaux de la grammaire. NULL symbole est
^
. Terme 'un nombre quelconque de" signifie zéro ou plusieurs fois, qui est l'étoile * fermeture.[IDÉE DE BASE]
SEUL TERMINAL: Si le feu est tout simplement
e (e being any terminal)
, nous pouvons écrireG
, avec une seule règle de productionS --> e
(oùS is the start symbol
), est un équivalent RG.De l'UNION de l'OPÉRATION: Si le RE est de la forme
e + f
, où les deuxe and f are terminals
, nous pouvons écrireG
, avec deux règles de productionS --> e | f
, est un équivalent RG.CONCATÉNATION: Si le RE est de la forme
ef
, où les deuxe and f are terminals
, nous pouvons écrireG
, avec deux règles de productionS --> eA, A --> f
, est un équivalent RG.STAR FERMETURE: Si le RE est de la forme
e*
, oùe is a terminal
et* Kleene star closure
opération, on peut écrire les deux règles de production dansG
,S --> eS | ^
, est un équivalent RG.PLUS de FERMETURE: Si le RE est de la forme e+, où
e is a terminal
et+ Kleene plus closure
opération, on peut écrire les deux règles de production dansG
,S --> eS | e
, est un équivalent RG.ÉTOILES, FERMETURE SUR l'UNION: Si le RE est de la forme (e + f)*, où les deux
e and f are terminals
, on peut écrire trois règles de production dansG
,S --> eS | fS | ^
, est un équivalent RG.PLUS FERMETURE SUR l'UNION: Si le RE est de la forme (e + f)+, où les deux
e and f are terminals
, nous pouvons écrire les quatre règles de production dansG
,S --> eS | fS | e | f
, est un équivalent RG.STAR de FERMETURE SUR la CONCATÉNATION: Si le RE est de la forme (ef)*, où les deux
e and f are terminals
, on peut écrire trois règles de production dansG
,S --> eA | ^, A --> fS
, est un équivalent RG.PLUS de FERMETURE SUR la CONCATÉNATION: Si le RE est de la forme (ef)+, où les deux
e and f are terminals
, on peut écrire trois règles de production dansG
,S --> eA, A --> fS | f
, est un équivalent RG.Assurez-vous que vous comprend toutes les règles ci-dessus, voici le tableau récapitulatif:
[RÉPONDRE]
Maintenant, nous pouvons venir à votre problème.
a)
(0+1)*00(0+1)*
Droit Linéaire De La Grammaire:
S --> 0 | 1S | 00A
Un --> 0A | 1A | ^
Chaîne peut commencer avec n'importe quelle chaîne de
0
s et1
s c'est pourquoi comportait des règless --> 0S | 1S
et Parce que au-moins une paire de00
,il n'est pas null symbole.S --> 00A
est inclus parce que0
,1
peut être après00
. Le symboleA
prend soin de 0 et de 1 après la00
.Gauche Linéaire De La Grammaire:
S --> S0 | S1 | A00
Un --> A0 | A1 | ^
b)
0*(1(0+1))*
Droit Linéaire De La Grammaire:
S --> 0 | UN | ^
Un --> 1B
B --> 0A | 1A | 0 | 1
Chaîne de caractères commence par un nombre quelconque de
0
ainsi la règleS --> 0S | ^
sont inclus, alors la règle pour générer10
et11
pour un certain nombre de fois à l'aide d'A --> 1B and B --> 0A | 1A | 0 | 1
.Autre alternative à droite linéaire de la grammaire peut être
S --> 0 | UN | ^
Un --> 10A | 11A | 10 | 11
Gauche Linéaire De La Grammaire:
S --> A | ^
Un --> A10 | A11 | B
B --> B0 | 0
Une forme alternative peut être
S --> S10 | S11 | B | ^
B --> B0 | 0
c)
(((01+10)*11)*00)*
Gauche Linéaire De La Grammaire:
S --> A00 | ^
Un --> B11 | S
B --> B01 | B10 | A
S --> A00 | ^
parce que toute chaîne est null, ou si ce n'est pas la valeur null, il se termine par un00
. Lorsque la chaîne se termine avec00
, la variableA
correspond au modèle((01 + 10)* + 11)*
. De nouveau, ce modèle peut être null ou doit se terminer par11
. Si sa valeur est null, alorsA
matchs avecS
de nouveau je.e la chaîne se termine avec motif comme(00)*
. Si le motif n'est pas null,B
matchs avec(01 + 10)*
. LorsqueB
correspond à tout ce qu'il peut,A
commence correspondant à la chaîne de nouveau. Cela ferme la plus * dans((01 + 10)* + 11)*
.Droit Linéaire De La Grammaire:
S --> A | 00S | ^
Un --> 01A | 10A | 11S
Deuxième partie de votre question,:
(réponse)
Vous solution sont mauvais pour les raisons suivantes,
Gauche-linéaire de la grammaire est mauvaise Parce chaîne
0010
pas possible de générer.Droit-linéaire de la grammaire est mauvaise Parce chaîne
1000
n'est pas possible de générer. Bien que les deux sont dans le langage généré par l'expression régulière de la question (a).MODIFIER
L'ajout de l'IFD pour chaque expression régulière. de sorte qu'on peut le trouver utile.
a)
(0+1)*00(0+1)*
b)
0*(1(0+1))*
c)
(((01+10)*11)*00)*
Dessin DFA pour cette expression régulière est truc et complexe.
Pour cela, j'ai voulu ajouter des DFA
Pour simplifier la tâche, il nous faut réfléchir sur la nature de la formation de RE
pour moi, la RE
(((01+10)*11)*00)*
ressemble(a*b)*
Réellement dans l'expression ci-dessus
a
de soi dans la forme de(a*b)*
c'est
((01+10)*11)*
RE
(a*b)*
est égal à(a + b)*b + ^
. La DFA (unb) est comme belows:DFA pour
((01+10)*11)*
est:DFA pour
(((01+10)*11)* 00 )*
est:Essayer de trouver une similitude dans la construction de plus de trois DFA. ne pas aller de l'avant jusqu'à ce que vous ne comprenez pas premier
merci pour le réponse, m'a beaucoup aidé +1. Est-il des outils ou des programmes que vous utilisez pour le dessin ou la vérification de la langue de la description.En outre, si vous recommandez un livre, je vais l'apprécier.
Merci! Pour dessiner des diagrammes-je utiliser dia:. Dans comments: pour ma réponse j'ai suggéré un peu de la source de l'apprentissage formel de la théorie. Pour attirer l'ASCII diagrammes-je utiliser ascii-flux.
regex
(0+1)
signifie que si0
, puis1
doivent apparaître ensemble." N cela signifie0
ou1
, dans les langages formels de l'opérateur binaire+
signifie union.Si les choses ne sont pas propres à vous, même après la description donnée, vous devez choisir un bon livre et de la lecture "expression régulière" et "grammaire" et "automates finis" séparément, puis essayer de comprendre ce réponse. - oui, c'est juste une réponse à la question n'est pas un livre ....... Je suppose que vous êtes au mauvais endroit au lieu de choisir un bon livre sur les langages formels
OriginalL'auteur
Règles pour convertir des expressions régulières pour la gauche ou la droite linéaire régulière de la grammaire
OriginalL'auteur