Ich brauche Hilfe beim Aufbau einer links-linearen und rechts-linearen Grammatik für die folgenden Sprachen?
%Vor%Für a) Ich habe folgendes:
%Vor%Stimmt das? Ich brauche Hilfe bei b & amp; c.
Zuerst beginne ich mit ein paar einfachen Regeln, um Reguläre Grammatik (RG) aus Regulärem Ausdruck (RE) zu konstruieren.
Ich schreibe Regeln für die rechte lineare Grammatik (als Übung lasse ich ähnliche Regeln für die linke lineare Grammatik schreiben)
HINWEIS: Großbuchstaben werden für Variablen verwendet und klein für Terminals in Grammatik. Das NULL-Symbol ist ^
. Term 'any number' bedeutet null oder mehr mal das ist * Sternschluss.
[ BASISIDEE ]
SINGLE TERMINAL: Wenn der RE einfach e (e being any terminal)
ist, können wir G
schreiben, mit nur einer Produktionsregel S --> e
(wobei S is the start symbol
) ein Äquivalent ist RG.
UNION OPERATION: Wenn der RE die Form e + f
hat, wo beide e and f are terminals
sind, können wir G
schreiben, mit zwei Produktionsregeln S --> e | f
, ist ein gleichwertig RG.
KONZENTRATION: Wenn die RE die Form ef
hat, können wir e and f are terminals
schreiben, G
, mit zwei Produktionsregeln S --> eA, A --> f
, ist ein Äquivalent RG.
STAR CLOSURE: Wenn der RE die Form e*
hat, wobei e is a terminal
und * Kleene star closure
Operation, können wir zwei Produktionsregeln in G
,% co_de schreiben %, ist ein äquivalentes RG.
PLUS CLOSURE: Wenn die RE die Form e + hat, können wir in S --> eS | ^
und e is a terminal
operation zwei Produktionsregeln schreiben + Kleene plus closure
, G
, ist ein äquivalentes RG.
STAR CLOSURE ON UNION: Wenn der RE die Form (e + f) * hat, wo beide S --> eS | e
sind, können wir drei Produktionsregeln in e and f are terminals
,% schreiben co_de%, ist ein äquivalentes RG.
PLUS VERSCHLUSS AUF UNION: Wenn der RE die Form (e + f) + hat, wo wir beide G
, können wir vier Produktion schreiben Regeln in S --> eS | fS | ^
, e and f are terminals
, ist ein äquivalentes RG.
STAR CLOSURE ON CONCATENATION: Wenn der RE die Form (ef) * hat, wo beide G
sind, können wir drei Produktionsregeln in S --> eS | fS | e | f
, e and f are terminals
schreiben , ist ein äquivalentes RG.
PLUS VERSCHLUSS: Wenn der RE die Form (ef) + hat, wo beide G
, können wir drei Produktionsregeln schreiben S --> eA | ^, A --> fS
, e and f are terminals
, ist ein äquivalentes RG.
Stellen Sie sicher, dass Sie alle oben genannten Regeln verstehen, hier ist die Übersichtstabelle:
%Vor%Hinweis: Das Symbol% co_de% und
G
sind Terminals, ^ ist ein NULL-Symbol undS --> eA, A --> fS | f
ist die Startvariable
[ANTWORT]
Jetzt können wir zu dir Problem kommen.
a) e
Sprachbeschreibung: Alle Strings bestehen aus 0s und 1s und enthalten mindestens ein Paar
f
.
Rechte lineare Grammatik:
S - & gt; 0S | 1S | 00A
A - & gt; 0A | 1A | ^
String kann mit einer beliebigen Zeichenfolge von S
s und (0+1)*00(0+1)*
s beginnen, weshalb die Regeln 00
und Da mindestens ein Paar 0
enthalten sind, gibt es kein Nullsymbol. 1
ist enthalten, weil s --> 0S | 1S
, 00
nach S --> 00A
stehen können. Das Symbol% co_de% kümmert sich um die 0 und 1 nach dem 0
.
Linke lineare Grammatik:
S - & gt; S0 | S1 | A00
A - & gt; A0 | A1 | ^
b) 1
Sprachbeschreibung: Eine beliebige Anzahl von 0, gefolgt von einer beliebigen Zahl von 10 und 11.
{weil 1 (0 + 1) = 10 + 11}
Rechte lineare Grammatik:
S - & gt; 0S | A | ^
A - & gt; 1B
B - & gt; 0A | 1A | 0 | 1
String beginnt mit einer beliebigen Anzahl von 00
, also wird Regel A
eingeschlossen, dann Regel für das Erzeugen von 00
und 0*(1(0+1))*
für beliebig viele Male mit 0
.
Eine andere alternative rechtslineare Grammatik kann
sein S - & gt; 0S | A | ^
A - & gt; 10A | 11A | 10 | 11
Linke lineare Grammatik:
S - & gt; A | ^
A - & gt; A10 | A11 | B
B - & gt; B0 | 0
Eine alternative Form kann
sein S - & gt; S10 | S11 | B | ^
B - & gt; B0 | 0
c) S --> 0S | ^
Sprachbeschreibung: Erstens enthält die Sprache null (^) Zeichenkette, weil dort ein * (Stern) außerhalb jedes im Inneren vorhandenen Gegenstands () steht. Auch wenn eine Zeichenkette in der Sprache nicht Null ist, die trotzig mit 00 endet. Man kann einfach diesen regulären Ausdruck in Form von (((A) * B) * C) * denken, wobei (A) * (01 + 10) ist * Das ist eine beliebige Anzahl von Wiederholungen von 01 und 10. Wenn es eine Instanz von A in der Zeichenkette gibt, würde ein B trotzig sein, weil (A) * B und B 11. ist Einige Beispielstrings {^, 00, 0000, 000000, 1100, 111100, 1100111100, 011100, 101100, 01110000, 01101100, 0101011010101100, 101001110001101100 ....}
Linke lineare Grammatik:
S - & gt; A00 | ^
A - & gt; B11 | S
B - & gt; B01 | B10 | A
10
, weil eine beliebige Zeichenkette entweder null ist, oder wenn sie nicht null ist, endet sie mit einem 11
. Wenn die Zeichenfolge mit A --> 1B and B --> 0A | 1A | 0 | 1
endet, stimmt die Variable (((01+10)*11)*00)*
mit dem Muster S --> A00 | ^
überein. Auch dieses Muster kann entweder null sein oder mit 00
enden. Wenn es null ist, stimmt 00
mit A
überein, d. H. Die Zeichenfolge endet mit dem Muster wie ((01 + 10)* + 11)*
. Wenn das Muster nicht null ist, stimmt 11
mit A
überein. Wenn S
mit allem übereinstimmt, was es kann, beginnt (00)*
mit der Übereinstimmung der Zeichenfolge. Dies schließt das äußerste * in B
.
Rechte lineare Grammatik:
S - & gt; A | 00S | ^
A - & gt; 01A | 10A | 11S
Zweiter Teil Ihrer Frage :
%Vor% ( Antwort )
Ihre Lösung ist aus folgenden Gründen falsch:
Links-lineare Grammatik ist falsch, da String (01 + 10)*
nicht generierbar ist.
Die rechts-lineare Grammatik ist falsch. Da die Zeichenfolge B
nicht generiert werden kann. Obwohl beide Sprachen durch den regulären Ausdruck der Frage (a) erzeugt werden.
BEARBEITEN
Hinzufügen von DFAs für jeden regulären Ausdruck damit man es hilfreich finden kann.
a) A
b) ((01 + 10)* + 11)*
c) 0010
Das Zeichnen von DFA für diesen regulären Ausdruck ist ein Trick und komplex.
Dazu wollte ich DFAs
Um die Aufgabe zu vereinfachen, sollten wir die Artbildung von RE denken
für mich sieht die RE 1000
wie (0+1)*00(0+1)*
Tatsächlich in obigem Ausdruck 0*(1(0+1))*
it self in Form von (((01+10)*11)*00)*
das ist (((01+10)*11)*00)*
RE (a*b)*
ist gleich a
. Der DFA für (a b) lautet wie folgt:
DFA für (a*b)*
ist:
DFA für ((01+10)*11)*
ist:
Versuchen Sie, die Ähnlichkeit in der Konstruktion der obigen drei DFA zu finden. gehe nicht weiter, bis du den ersten nicht verstanden hast
Tags und Links grammar formal-languages computation-theory regular-language