Kann mir jemand dabei helfen:
Ich versuche eine Grammatik für diese Sprache zu schreiben? Ich weiß nicht, wie ich das machen soll. Ich habe es versucht:
Kann mir jemand dabei helfen:
Ich versuche eine Grammatik für diese Sprache zu schreiben? Ich weiß nicht, wie ich das machen soll. Ich habe es versucht:
Antworten:
Betrachten Sie die beiden Sprachen:
Überzeugen Sie sich davon .
Im , die Anzahl der sind mehr als doppelt so hochEs muss also mindestens einen geben (wenn es keine gibt 's). Auch für jede Zugabe von, mindestens 2 muss hinzugefügt werden. Sie können generieren wie:
ist etwas kniffliger. Die Anzahl dersind weniger als doppelt so viele wie 's, so kann es sein 's, aber nicht Null 's. Betrachten Sie den "Basisfall" von . Die Zeichenfolge kann entweder sein oder . Wir lassen die erste Regel diesen Basisfall generieren. Beachten Sie danach, dass für jede Hinzufügung vonkönnen wir die Anzahl erhöhen ist höchstens vorbei . Also können wir hinzufügen, , oder 's für jede Hinzufügung von . Wir lassen die zweite Regel damit umgehen. Also die CFG für wird:
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 bekommenLassen Sie den Startzustand von führen entweder zum Ausgangszustand von , Oder von ::
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.
Beginnen Sie mit einer Grammatik für ::