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 %code% . Term 'any number' bedeutet null oder mehr mal das ist * Sternschluss.
[ BASISIDEE ]
SINGLE TERMINAL: Wenn der RE einfach %code% ist, können wir %code% schreiben, mit nur einer Produktionsregel %code% (wobei %code% ) ein Äquivalent ist RG.
UNION OPERATION: Wenn der RE die Form %code% hat, wo beide %code% sind, können wir %code% schreiben, mit zwei Produktionsregeln %code% , ist ein gleichwertig RG.
KONZENTRATION: Wenn die RE die Form %code% hat, können wir %code% schreiben, %code% , mit zwei Produktionsregeln %code% , ist ein Äquivalent RG.
STAR CLOSURE: Wenn der RE die Form %code% hat, wobei %code% und %code% Operation, können wir zwei Produktionsregeln in %code% ,% co_de schreiben %, ist ein äquivalentes RG.
PLUS CLOSURE: Wenn die RE die Form e + hat, können wir in %code% und %code% operation zwei Produktionsregeln schreiben %code% , %code% , ist ein äquivalentes RG.
STAR CLOSURE ON UNION: Wenn der RE die Form (e + f) * hat, wo beide %code% sind, können wir drei Produktionsregeln in %code% ,% schreiben co_de%, ist ein äquivalentes RG.
PLUS VERSCHLUSS AUF UNION: Wenn der RE die Form (e + f) + hat, wo wir beide %code% , können wir vier Produktion schreiben Regeln in %code% , %code% , ist ein äquivalentes RG.
STAR CLOSURE ON CONCATENATION: Wenn der RE die Form (ef) * hat, wo beide %code% sind, können wir drei Produktionsregeln in %code% , %code% schreiben , ist ein äquivalentes RG.
PLUS VERSCHLUSS: Wenn der RE die Form (ef) + hat, wo beide %code% , können wir drei Produktionsregeln schreiben %code% , %code% , 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 %code% sind Terminals, ^ ist ein NULL-Symbol und %code% ist die Startvariable
[ANTWORT]
Jetzt können wir zu dir Problem kommen.
a) %code%
Sprachbeschreibung: Alle Strings bestehen aus 0s und 1s und enthalten mindestens ein Paar %code% .
Rechte lineare Grammatik:
S - & gt; 0S | 1S | 00A
A - & gt; 0A | 1A | ^
String kann mit einer beliebigen Zeichenfolge von %code% s und %code% s beginnen, weshalb die Regeln %code% und Da mindestens ein Paar %code% enthalten sind, gibt es kein Nullsymbol. %code% ist enthalten, weil %code% , %code% nach %code% stehen können. Das Symbol% co_de% kümmert sich um die 0 und 1 nach dem %code% .
Linke lineare Grammatik:
S - & gt; S0 | S1 | A00
A - & gt; A0 | A1 | ^
b) %code%
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 %code% , also wird Regel %code% eingeschlossen, dann Regel für das Erzeugen von %code% und %code% für beliebig viele Male mit %code% .
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) %code%
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
%code% , weil eine beliebige Zeichenkette entweder null ist, oder wenn sie nicht null ist, endet sie mit einem %code% . Wenn die Zeichenfolge mit %code% endet, stimmt die Variable %code% mit dem Muster %code% überein. Auch dieses Muster kann entweder null sein oder mit %code% enden. Wenn es null ist, stimmt %code% mit %code% überein, d. H. Die Zeichenfolge endet mit dem Muster wie %code% . Wenn das Muster nicht null ist, stimmt %code% mit %code% überein. Wenn %code% mit allem übereinstimmt, was es kann, beginnt %code% mit der Übereinstimmung der Zeichenfolge. Dies schließt das äußerste * in %code% .
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 %code% nicht generierbar ist. Die rechts-lineare Grammatik ist falsch. Da die Zeichenfolge %code% 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) %code%
b) %code%
c) %code%
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 %code% wie %code%
aus %Vor%Tatsächlich in obigem Ausdruck %code% it self in Form von %code% das ist %code%
RE %code% ist gleich %code% . Der DFA für (a b) lautet wie folgt:
DFA für %code% ist:
DFA für %code% ist:
Versuchen Sie, die Ähnlichkeit in der Konstruktion der obigen drei DFA zu finden. gehe nicht weiter, bis du den ersten nicht verstanden hast