Wie konvertiere ich eine nicht einbettende kontextfreie Grammatik in eine reguläre Grammatik?

7

Bitte beachten Sie, dass mir die Unentscheidbarkeit der Umwandlung von kontextfreier Grammatik in reguläre Grammatik bekannt ist. Aber gibt es angesichts der nicht einbettenden Eigenschaft der kontextfreien Eingabegrammatik einen Algorithmus, um sie direkt in reguläre Grammatik oder DFA umzuwandeln?

Franck Dernoncourt
quelle
Was meinst du mit "der nicht einbettenden Eigenschaft"?
DW

Antworten:

4

Schauen Sie sich diesen Link an . Dies ist eine einfachere Version eines Beweises von Chomsky, dass NSE-Grammatiken reguläre Sprachen darstellen. Glücklicherweise zeigt die Proof-Technik, wie aus einer gegebenen NSE-Grammatik eine linksreguläre Grammatik konstruiert wird. Hier ist meine Erklärung:

  1. für jedes der Paare von Elementen von anhand der angegebenen Definition , ob : wenn .|V|(|V|+1)/2(v1,v2)Vv1v2v1v2v2:=Vv1V
  2. Construct Äquivalenzklassen , so dass , wenn und , und in der gleichen Äquivalenzklasse sind. Dies ist eine Aufteilung aller Elemente von in eine oder mehrere Äquivalenzklassen.v1v2v2v1v1v2V
  3. nun für jedes Paar von Äquivalenzklassen von wie oben beschrieben, ob indem Sie prüfen, ob in in .(VE1,VE2)VVE1VE2v1VE1v2VE2
  4. Konstrukt setzt , die den Äquivalenzklassen entsprechen, so dass, wenn , eine Teilmenge von . Jedes muss auch den Alphabetsatz . Sie haben ein für jedes , und jedes enthält zusätzlich zu allen Alphabetsymbolen Variablen in Äquivalenzklassen, die "kleiner als" das entsprechende sind.UEVEVEiVEkVEiUEkUEkEUEVEUEVE
  5. Bestimmen Sie für jede Variable wie folgt: ist die Menge aller Produktionen in deren linke Seite zur Äquivalenzklasse gehört, die die Variable .P(v)vP(v)Pv
  6. Konstruieren Sie für jede Variable eine Grammatik wie folgt: , wobei die Äquivalenzklasse ist, die und das diejenige ist, die dem .vG(v)=(VEUE,UE,P(v),v)VEvUEVE
  7. Die Autoren haben ein Lemma bewiesen, das behauptet, dass eine lineare Grammatik ist. Daraus können wir für jede Variable reguläre Ausdrücke über schreiben . Beachten Sie, dass dieser reguläre Ausdruck für das , das dem "kleinsten" , nur Symbole aus dem ursprünglichen Alphabet .G(v)UEvUEVEE
  8. Ersetzen Sie reguläre Ausdrücke, die nur Alphabetsymbole enthalten, iterativ durch kompliziertere reguläre Ausdrücke aus Schritt 7. Schließlich erhalten Sie einen regulären Ausdruck, der der Sprache entspricht, die aus dem ursprünglichen Startsymbol generiert wurde , und dieser reguläre Ausdruck enthält nur Alphabetsymbole aus dem Original Alphabet.S
  9. Sie haben jetzt einen regulären Ausdruck für die NSE-Grammatik und können mithilfe des Kleene-Theorems, der Teilmengenkonstruktion und eines DFA-Minimierungsalgorithmus einen minimalen DFA erhalten.

Wenn Sie ein Beispiel wünschen, kann ich später versuchen, eines bereitzustellen. Versuchen Sie, ein paar selbst zu machen, lesen Sie das Papier (es ist kurz), und wir können später über Komplexität sprechen.

Patrick87
quelle
Woa, das braucht etwas Liebe zum Formatieren, Patrick!
Raphael
@ Raphael Ja, SO verwendet LaTeX nicht, also habe ich damals mein Bestes gegeben. Ich freue mich nicht darauf, aber ich werde mich irgendwann darum kümmern, wenn mich jemand anderes nicht schlägt.
Patrick87