Ein praktischer Ansatz, der in vielen Beispielen funktioniert (aber ich weiß nicht immer), besteht darin, die Verschachtelungsstruktur der Zeichenfolgen in der Sprache zu finden. "Verschachtelte Abhängigkeiten" müssen gleichzeitig in verschiedenen Teilen des Strings generiert werden.
Wir haben auch die Basis-Toolbox :
Verkettung: Wenn Sie die Sprache in zwei aufeinander folgende Teile aufteilen können, verwenden Sie diese ProduktionS→S1S2
Vereinigung: in disjunkte Teile aufgeteiltS→S1∣S2
Iteration: S→S1S∣ε
Beispiel 1
Hier ein Beispiel für die Verschachtelung (Danke Raphael).
L={bkal(bc)manbo∣k,l,m,n,o∈N,k≠o,2l=n,m≥2}
Ersetzen Sie durch 2 l . Wir können jetzt n Bedingungen fallen lassen.n2ln
Ersetze durch k > o oder k < o (verwirrt? O ist 'oh' nicht 'null'). Werkzeuge für die Vereinigung anwenden. Wir arbeiten hier mit k > o . Auch k > o wenn k = s + ok≠ok > o oder k < oOk > ok > ok = s + o und wobei s eine neue Variable ist. Ersetze k durch s + o .s > 0sks + o
L1= { bs + oeinl( b c )mein2 lbO≤ l , m , o , s ≤ N , s > 0 , m ≥ 2 }
Einige einfache Änderungen.
L1= { b bsbOeinlbcbc(bc)m(aa)lbo∣l,m,o,s∈N}
Jetzt sehen wir die Verschachtelungsstruktur und beginnen mit dem Aufbau einer Grammatik.
S1→TV , , U → b U ∣ ε (siehe: Verkettung und Iteration hier)T→bUU→bU∣ε
(wir erzeugenbeidseitig o b )V→bVb∣Wo b
W→ ein Waa∣X
, Y → b c b c , Z → b c Z ∣ εX→ YZY.→bcbcZ→bcZ∣ε
Beispiel 2
K={akblcm∣l=m+k}
Ein erstes "offensichtliches" Umschreiben.
K={akbm+kcm∣m,k≥0}={akbmbkcm∣m,k≥0}
In der Sprachwissenschaft nennt man dies "Kreuz-Serien-Abhängigkeit": die Verschachtelung weist (normalerweise) stark auf Nichtkontextfreiheit hin. Natürlich ist m + k = k + m und wir sind gerettet.k,m,k,mm+k=k+m
K={akbk+mcm∣m,k≥0}={akbkbmcm∣m,k≥0}
mit Produktionen , X → a X bS→XY , Y → b Y c | & egr;X→aXb∣εY→bYc∣ε
In ähnlicher Weise ist K′={akblcm∣m=k+l}={akblclck∣k,l≥0}
mit Produktionen , X → b X c | & egr;S→aSc∣XX→bXc∣ε
Letzter Kommentar: Diese Techniken helfen Ihnen dabei, eine kontextfreie Grammatik für Kandidaten zu finden, die Ihre Sprache hoffentlich erkennt. Möglicherweise ist noch ein Korrektheitsnachweis erforderlich, um sicherzustellen, dass die Grammatik Ihre Sprache wirklich erkennt (nicht mehr und nicht weniger).