Kontextfreie Grammatik für {a ^ ib ^ j | i, j ≥ 0; i ≠ 2j}


7

Kann mir jemand dabei helfen:

L={aibji,j0 and i2j}

Ich versuche eine Grammatik für diese Sprache zu schreiben? Ich weiß nicht, wie ich das machen soll. Ich habe es versucht:
SaaAbaAAaAa


5
Sie können die Aufgabe vereinfachen, indem Sie die Sprache aufteilen: L={aibji<2j}{aibji>2j}
Mike B.

3
Der Grund dafür ist, dass CFGs unter Gewerkschaft geschlossen sind.
Paresh

1
Grundsätzlich ist die Frage hier bereits beantwortet: Kontextfreie Grammatik für Sprache
Hendrik

Antworten:


7

Betrachten Sie die beiden Sprachen:
L1={aibji,j0 and i>2j}
L2={aibji,j0 and i<2j}

Überzeugen Sie sich davon L=L1L2.

Im L1, die Anzahl der asind mehr als doppelt so hochbEs muss also mindestens einen geben a (wenn es keine gibt b's). Auch für jede Zugabe vonb, mindestens 2 amuss hinzugefügt werden. Sie können generierenL1 wie:

S1aAAaaAbaAε

L2ist etwas kniffliger. Die Anzahl derasind weniger als doppelt so viele wie b's, so kann es sein 0 a's, aber nicht Null b's. Betrachten Sie den "Basisfall" von1 b. Die Zeichenfolge kann entweder seinb oder ab. Wir lassen die erste Regel diesen Basisfall generieren. Beachten Sie danach, dass für jede Hinzufügung vonbkönnen wir die Anzahl erhöhen aist höchstens vorbei 2. Also können wir hinzufügen0, 1, oder 2 a's für jede Hinzufügung von b. Wir lassen die zweite Regel damit umgehen. Also die CFG fürL2 wird:

S2BbaBbBBbaBbaaBbε

Beachten Sie, dass CFGs unter Vereinigung geschlossen sind, dh die Vereinigung von zwei CFGs ist ebenfalls eine CFG. Also, um die CFG für zu bekommenLLassen Sie den Startzustand S von L führen entweder zum Ausgangszustand von L1, Oder von L2::

SS1S2

Der Rest der Regeln bleibt der gleiche wie in den beiden Sprachen. Es mag eine einfachere Grammatik geben, aber dies war die erste, die mir in den Sinn kam.


0

Beginnen Sie mit einer Grammatik für {aib2i:i0}::

SaSbbϵ
Jetzt hacke es, damit es mehr gibt a als bb::
SaSbbAAaAa
Die Modifikation, um mehr zu erzwingen bist ähnlich und dir überlassen. Es werden ein Nonterminal und drei Produktionen hinzugefügt.

3
Dadurch werden nicht alle Zeichenfolgen generiert aoder alle b's, die ein Teil von sind L.
Paresh

Wenn ich die Frage in i, j≥1 und i ≠ j und i <2j ändere, wie kann ich mir dann eine Lösung vorstellen?
user6885

@Paresh, der Teil von extra bs bleibt zu vervollständigen. Und allesas ist SAak.
vonbrand

Aah ... ich weiß nicht, wie ich das verpasst habe. Es tut uns leid!
Paresh

@Vonbrand das Problem, dass ich nicht weiß, dass ich das zusätzliche bso tun soll, dass es nicht mehr als das a sein wird.
user6885
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.