Frage

in S-Grammatik Alle Produktionen sind in Form von generationspflichtigem Tagencode

"... und jedes Paar (A, A) tritt höchstens einmal in P." auf [p. Linz, 6. ed. , p. 144]

s-grrammar ist eindeutig und ich denke (nicht sicher) Wir können alle eindeutigen CFL von S-Grammar beschreiben. Ich möchte wissen, kann S-Grammatik alle möglichen DCFL oder nicht? Nach diesem Satz, denke ich, dass wir es nicht tun können, aber ich bin mir nicht sicher:

Leider können nicht alle Merkmale einer typischen Programmiersprache von einer S-Grammatik ausgedrückt werden. [p. Linz, 6. ed. , p. 152]

aber alle Sprachen, die von einer S-Grammatik beschrieben werden, ist deterministisch .

Ich sage das, weil wir 2-staatliche DPDA für jede einfache Grammatik mit dieser Definition erstellen können:

generasacodicetagpre.

 DPDA für jede S-Grammatik

Wenn es DCFL gibt, dass wir keine S-Grammar dafür bereitstellen können, zeigen Sie mir das, bitte und korrigiere mich, wenn ich falsch liege.

danke.

War es hilfreich?

Lösung

eigentlich kann das Beispiel einer nicht akzeptierten Sprache aufgrund der Technik ziemlich einfach sein. Die Sprache $ A ^ * $ wird nicht von einer S-Grammatik erzeugt.

In der Tat kann eine S-Grammatik nicht erzeugt $ \ VAREPSILON $ . Um $ S $ aus dem Stapel zu entfernen, müssen wir mindestens eine Produktion anwenden, und jede Produktion erzeugt ein terminales Symbol.

Aber auch wenn wir dies als Technik sehen, können wir nicht zwei Saiten erstellen, von denen eines das Präfix eines anderen ist. Wenn wir eine Zeichenfolge $ \ alpha $ generieren können, die dann akzeptiert wird, da alle Veriables neu geschrieben wurden (der Stapel nur den neuen $ z '$ ), wie würden wir dann eine längere Zeichenfolge $ \ alpha \ beta $ erstellen? Es muss zunächst derselben Berechnung folgen.

Dies ist der Fall, da die PDA, die Sie produzieren, eigentlich ein PDA mit leerer Stack-Akzeptanz: Wenn der Stapel leer ist (oder tatsächlich nur $ Z '$ ) Wir müssen annehmen. Es ist bekannt, dass deterministizer PDA mit leerer Stapelakzeptanz nur präfixfreie Sprachen generieren kann. Addingan-End-of-String-Marker ist normalerweise das Mittel.

Die Echtzeiteigenschaft (Lesen eines Symbols jeden Schritt) ist ein größeres Problem. Betrachten Sie die Sprache $ \ {a ^ ib ^ jc ^ i \ mid i, j \ ge 1 \ ^ \ cup \ {a ^ ib ^ jd ^ j \ mid i, j \ Ge 1 \} $ . Es kann von einem DPDA akzeptiert werden. Push $ A $ , Push $ B $ 's. Wenn Sie dann einen $ C $ lesen, geben wir den $ B $ , und vergleichen Sie die $ A $ 's und $ C $ ' s. Ansonsten, wenn Sie einen $ D $ lesen, vergleichen wir den $ d $ mit der $ B $ Verwenden des Stapels. Somit benötigen Sie das Poppen von Stack-Symbolen, ohne den Eingang zu lesen. Ein Echtzeit-PDA kann das nicht tun (und weder die S-Grammatik). Die Quelle, die ich wusste, bezieht sich auf AUTEBERT, BERSTEL, Boasson: kontextfreie Sprachen und Pushdown-Automatika im Handbuch der formalen Sprachen.

Natürlich hat der PDA nur einen einzigen Zustand. Ich muss überprüfen: Es scheint, dass auch die Einschränkung der einzelnen Zustand die akzeptierten Sprachen verringert.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit cs.stackexchange
scroll top