Ich versuche, meine bevorstehende Prüfung zu lösen, und habe keine Ahnung, wie ich die Grammatik für kontextsensitive Sprachen generieren soll, zum Beispiel, wie ich mit dieser Art von Frage vorgehen soll.
Geben Sie eine kontextsensitive (nicht nur längenerhöhende) Grammatik für an .
Ideen oder Ansätze zum Umgang mit solchen Fragen werden sehr geschätzt.
Antworten:
Intuitiv möchten Sie drei Zwischensymbole gleichzeitig generieren und den Symbolen erlauben, sich selbst zu sortieren. LassenS. sei das Startsymbol. Die Generierungsregeln sind:
quelle
Die Antwort für Ihr spezifisches Beispiel ist da, aber die allgemeine Frage bleibt.
In sehr vielen Jahren, sowohl in der theoretischen als auch in der angewandten Informatik, erinnere ich mich nicht daran, eine CS-Grammatik als solche schreiben zu müssen.
Wenn ich jedoch einen Rat geben darf, sollte dies überhaupt nicht als Erstellung einer CF-Grammatik angesehen werden, wenn Sie die Regeln erfinden müssen, um alles in Ordnung zu bringen und genau richtig zu koordinieren, wie es erstellt wird.
CS-Grammatiken sind viel algorithmischer, und Sie können eine Turing-Maschine (die im endlichen Raum arbeitet, proportional zur Eingabegröße, was Linear Bounded Automaton - LBA bedeutet) ziemlich genau nachahmen, um die Dinge nach Bedarf zu bewegen. Es ist also viel mehr eine Programmierübung.
Sie können so ziemlich die ersten Zutaten generieren, um eines der Wörter in der Sprache zu erstellen, und sie dann algorithmisch verschieben. Sie können spezielle Symbole (möglicherweise in verschiedenen Geschmacksrichtungen, die dem endlichen Zustand entsprechen) verwenden, um als Köpfe zu fungieren, die Sie mit geeigneten Regeln bewegen, und um zu überprüfen, was zu tun ist. Und so weiter.
Eine gute Lektüre kann darin bestehen, den Beweis der Gleichwertigkeit zwischen CSG-Sprachen und LBA-Sprachen, dh den CS-Sprachen, zu prüfen.
Denken Sie daran, dass fast alle Algorithmen, mit denen wir arbeiten, von einem LBA ausgeführt werden können und daher einer CSG-definierbaren Sprache entsprechen. Das sollte Ihnen eine Vorstellung von der verfügbaren algorithmischen Leistung geben.
Aber ein bisschen Fantasie hilft bei eleganten Lösungen, wie in dem Beispiel, das Sie gegeben haben.
quelle
Dies ist nur eine zusätzliche Antwort, die als allgemeine Lösung angesehen werden kann. CSLs, kontextsensitive Sprachen, werden durch LBAs, linear begrenzte Automaten, modelliert . Ein LBA ist eine Turing-Maschine, die ein Arbeitsband annehmen oder ablehnen kann, das nicht größer als das Konstante mal die Größe des Eingabebandes ist. Wenn Sie also ein Computerprogramm finden können, das die Eingabe in einem konstanten Raum verarbeiten kann, dann ist es eine CSL. Idee: Ein Programm, das für dieses Problem geeignet ist, würde so etwas wie Permutationen in konstantem Raum aufzählen.
quelle